2009-07-20 96 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) 
        }; 

我只是好奇,如果这是最好的解决方案?