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 将 Cars 与一列 SUM(Summ) 进行分组,但它不能正常工作。能否请你帮忙。

4

2 回答 2

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条件 - 它复制on了你的连接条件

于 2014-04-24T10:05:15.537 回答
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 包含在 group by 中,然后 Sum 超过 b.Summ。我还认为这个 linq 语句实际上不需要 g (Rent?)。

于 2014-04-24T10:04:28.150 回答