2009-07-20 133 views
1

我無法將這個SQL查詢轉換成一個工作LINQ聲明Linq查詢與左連接和組

select sum(cena), id_auta, max(servis) from dt_poruchy left outer join mt_auta on dt_poruchy.id_auta=mt_auta.id
where dt_poruchy.servis>=3 group by id_auta;

我tryed這樣的事情,但我不能處理的select語句

var auta = from a in MtAuta.FindAll() 
        join p in DtPoruchy.FindAll() on a equals p.MtAuta into ap 
        from ap2 in ap.DefaultIfEmpty() 
        where ap2.SERVIS >= 3 
        group ap2 by ap2.ID into grouped 
        select new { 

我會感謝任何幫助!

回答

1

我已經達到了這個解決方案(假設「以上的價格」屬於MtAuta.FindAll()):

 var auta = from e in 
         (from a in DtPoruchy.FindAll() 
         where a.SERVIS >= 3 
         join p in MtAuta.FindAll() on a.MtAuta equals p.Id into ap 
         from ap2 in ap.DefaultIfEmpty() 
         select new 
         { 
          Cena = ap.cena, 
          IdAuta = a.MtAuta, 
          Servis = a.servis 
         }) 
        group e by e.IdAuta into g 
        select new 
        { 
         Cena = g.Sum(e => e.cena), 
         IdAuta = g.Key, 
         Servis = g.Max(e => e.servis) 
        }; 
1

我不確定哪個表cena和servis來自但是創建分組總和,你做類似的事情。

select new { Sum = grouped.Sum(x => x.cena) } 

,並獲得最大的

select new { Max = grouped.Group.Max(x => x.servis) } 

這是給你一個很好的參考。

2

根據所提供的有限信息(表是從某些領域?),這裏是我想出了。

var auta = from a in MtAuta.FindAll() 
      let p = a.DtPoruchys.Where(s => s.SERVIS >= 3) 
      select new 
      { 
       Id = a.Id, 
       CenaSum = p.Sum(c => c.Cena), 
       Servis = p.Max(s => s.SERVIS) 
      }; 
+0

讓我知道如果我做了任何不正確的假設,我會確保更新我的答案! – 2009-07-20 15:15:34

+0

對於我的incoplete定義,我很抱歉。 MtAuta是主表(包含DtPoruchy),而DtPoruchy是包含CENA,SERVIS和ID_AUTA字段的從表。 – user137348 2009-07-20 16:39:09

0

我修改您的解決方案點點,我得到了它的工作是這樣的:

var auta = from jo in 
         (
          from a in MtAuta.FindAll() 
          join p in DtPoruchy.FindAll() on a equals p.MtAuta into ap 
          from ap2 in ap.DefaultIfEmpty() 
          where ap2.SERVIS >= 3 
          select new 
          { 
           Cena = ap2.CENA, 
           Idauto = ap2.ID_AUTA, 
           Servis = ap2.SERVIS 
          } 
         ) 
        group jo by jo.Idauto into g 
        select new 
        { 
         Cena = g.Sum(jo => jo.Cena), 
         IdAuto = g.Key, 
         Servis = g.Max(jo => jo.Servis) 
        }; 

我只是好奇,如果這是最好的解決方案?