2014-04-24 30 views
0
var query = from c in context.Auto 
      join r in context.Label on c.idAutoChar equals r.idAutoChar 
      join g in context.Rent on c.idAuto equals g.idAuto 
      where c.idAutoChar == r.idAutoChar && c.idAuto == g.idAuto 
      group new {c, r, g} by new {c.idAuto, r.Name, c.RegNumber, g.Summ} into v 
      select new 
      { 
       v.Key.idAuto, 
       v.Key.Name, 
       v.Key.RegNumber, 
       Sum = (from b in v select v.Key.Summ).Sum() 
      }; 

我需要通过idAuto与SUM(Summ)列组Cars,但它没有正常工作。能否请你帮忙。Linq Group通过编号

回答

0

假设g.Summ是一个数字值,你想对它进行求和,而不是你真正想要分组的东西,那么它不应该是关键的一部分。

我没有测试这个方式,但是这样的事情可能是答案:

c in context.Auto 
        join r in context.Label on c.idAutoChar equals r.idAutoChar 
        join g in context.Rent on c.idAuto equals g.idAuto 
        where c.idAutoChar == r.idAutoChar && c.idAuto == g.idAuto 
        group new {c, r, g} by new {c.idAuto, r.Name, c.RegNumber} into v 
        select new 
        { 
         v.Key.idAuto, 
         v.Key.Name, 
         v.Key.RegNumber, 
         Sum = (from b in v 
              select b.Summ).Sum() 
        }; 

注意我们不包括c.Summ组通过,且数额而乙级以上.Summ。我也认为g(Rent?)在这个linq语句中实际上并不需要。

+0

on条件'Sum'接受键选择,所以这将是更多的可读性,而不是使用了'(从B以V选择b.Summ)'部分。 – BartoszKP

+0

谢谢。你帮了我。但它应该是这样的: Sum =(从b在v中选择b.g.Summ).Sum() – user3568230

1
var query = from c in context.Auto 
       join r in context.Label on c.idAutoChar equals r.idAutoChar 
       join g in context.Rent on c.idAuto equals g.idAuto 
       //where c.idAutoChar == r.idAutoChar && c.idAuto == g.idAuto //??? 
       group new {c, r, g} by new {c.idAuto, r.Name, c.RegNumber} into v 
         select new 
         { 
          v.Key.idAuto, 
          v.Key.Name, 
          v.Key.RegNumber, 
          Sum = v.Sum(item => item.Key.Summ) 
         }; 

使用Sum = v.Sum(item => item.Key.Summ)和不按Summ,否则会产生一组项目为每个不同的Summ值。

顺便说一句,你为什么需要你where条件 - 它复制的你的加入

+0

b.Key没有“Sum”方法。但是,谢谢 – user3568230

+0

是的,原谅我,这是一个错字 – Andrew

+0

@BartoszKP是的,我解决了它=(从b在v选择b.g.Summ).Sum() – user3568230