考虑一个函数 (GetData),它返回以下结果集,其中第一列是部门 id,第二列是“TotalSales”:
DivisionID: 3 500
DivisionID: 3 500
DivisionID: 3 500
DivisionID: 4 800
DivisionID: 4 800
DivisionID: 5 50
我需要编写一个 LINQ 查询来获得以下结果:
DiviosnID 3: (500 * 3) - 500 = 1000
DiviosnID 4: (800 * 2) - 800 = 800
DiviosnID 5: 0 /*this since it's happening only once*/
所以总数变为:1000 + 800 = 1800
最后,这个值应该乘以 -1,结果是 -1800。
以下 LINQ 查询完成了工作,但是恕我直言,这很可怕。问题是它是否可以重新编写以更快地执行并看起来更好?!请注意那里有第三列,就像我需要对其进行相同计算的名为“TotalPurchases”的 TotalSales。
GetData()
.Where(t => t.DivisionId != 0)
.GroupBy(t => t.DivisionId)
.Where(g => g.Count() > 1)
.Select(g => new MyEntity
{
TotalSales = g.Sum(n => n.TotalSales) - (g.Sum(n => n.TotalSales) / g.Count()),
TotalPurchases = g.Sum(n => n.TotalPurchases) - (g.Sum(n => n.TotalPurchases) / g.Count())
})
.Union(Enumerable.Repeat(new MyEntity(), 1))
.Aggregate((t1, t2) => new MyEntity
{
TotalSales = -(t1.TotalSales + t2.TotalSales),
TotalPurchases = -(t1.TotalPurchases + t2.TotalPurchases),
});
谢谢