【发布时间】:2014-07-28 11:09:08
【问题描述】:
有谁知道如何正确有效地对多列求和。
我有大量的加入查询
db.myTable.Join(...)
.Join(...)
.Join(...)
.Join(...)
.Join(...)
.Join(...)
.Where(...)
我现在需要做的是将 A、B、C 和 D 列相加,然后计算 E。
所以我有一个包含总和的记录。
我尝试使用 group by 和 Select(x => new myClass{A => x.})
以下是主要效率低下
myClass mine = new myClass{
Number = myList.GroupBy(x => x.u.ID).Count(),
Area = myList.Sum(a => a.u.Area ?? 0),
Rent = myList.Sum(a => a.r.Rent ?? 0) ,
ERV = myList.Sum(a => a.e.ERV ?? 0)
};
以下是高效的,但仅对第一个分组求和...
myClass mine = (from p in myList
group p by p.u.ID into g
select new myClass
{
Number = g.Count(),
Area = g.Sum(a => a.u.Area ?? 0),
Rent = g.Sum(a => a.r.Rent ?? 0) ,
ERV = g.Sum(a => a.e.ERV ?? 0)
}).FirstOrDefault();
【问题讨论】:
-
第二次查询
only sums the first grouping是什么意思? -
@Kaf 我想要所有租金的总和,也就是不分组。但我需要唯一 ID 的计数(不是唯一键)。第二个查询Groups by u.ID,对每个组内的值求和,然后只返回第一个组。 (
FirstOrDefault) - 不知道如何对组求和,或者我是否做错了。 -
第二个查询返回第一组,因为
.FirstOrDefault()。 -
我不想要每个分组的摘要列表。我想要一个完整的摘要。
-
那你为什么要按
p.u.ID分组?