C# 按id划分的Linq组
我需要用一列SUM(Summ)按idAuto对汽车进行分组,但它不能正常工作。你能帮忙吗 假设g.Summ是要求和的数值,而不是实际要分组的数值,那么它不应该是键的一部分 我无法测试这一点,但类似的答案可能是:C# 按id划分的Linq组,c#,linq,linq-group,C#,Linq,Linq Group,我需要用一列SUM(Summ)按idAuto对汽车进行分组,但它不能正常工作。你能帮忙吗 假设g.Summ是要求和的数值,而不是实际要分组的数值,那么它不应该是键的一部分 我无法测试这一点,但类似的答案可能是: var query = from c in context.Auto join r in context.Label on c.idAutoChar equals r.idAutoChar join g in context.Rent on
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()
};
注意,我们不将c.Summ包括在分组by中,并且该和大于b.Summ。我还认为在这个linq声明中实际上并不需要g(Rent?)
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()
};
使用Sum=v.Sum(item=>item.Key.Sum)
并且不要按Sum
分组,否则它将为每个不同的Sum
值生成一个分组项
顺便说一句,你为什么需要你的
where
条件-它在你的联接的条件上复制Sum
接受键选择器,因此它比(从v中的b选择b.Summ)
部分更易于使用。谢谢。你帮了我。但是它应该是这样的:Sum=(从v中的b选择b.g.Sum)。Sum()是的,对不起,那是atypo@BartoszKP是的,我通过Sum=(从v中的b选择b.g.Sum)解决了这个问题。Sum()应该有v.Sum
扩展方法可用。顺便说一句,你为什么需要你的where
条件-它在你的联接的条件上复制。@user3568230不是那样写的,说真的。看看更新的版本。更干净,更准确,更短,更快。然后去掉的where
条件,它只会减慢速度。
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)
};