3
在我的新项目中,我正在写很多LINQ。 我有一个像这样的很多LINQ查询:简化和设计LINQ查询
...
group new {A, B} by new {....}
into g
// Calculate select claw
let SumVal1 = g.Sum(x => x.A.Value1 * func(x.A, x.B))/g.Sum(x => func(x.A, x.B))
let SumVal2 = g.Sum(x => x.A.Value2 * func(x.A, x.B))/g.Sum(x => func(x.A, x.B))
let SumVal3 = g.Sum(x => x.A.Value3 * func(x.A, x.B))/g.Sum(x => func(x.A, x.B))
....
// Here could be some calculation, that are not patterned, like:
let NotPatternedSum1 = g.Sum(x => x.A.Duration)
...
select new {SumVal1, SumVal2, SumVal3, ..., NotPatternedSum, ...}
如何我可以简化这个?我有这种模式(Sum(A * func)/ Sum(func))的许多查询 - 我怎么能将这个引入到单个方法或委托?
也许你看过一些设计大LINQ查询的建议?我的代码是由95%的LINQ(我把数据库逻辑移动到客户端)组成的。请给我一些提示,也许不平凡=)
而且我要避免使用非匿名类型
日Thnx,很简单 - 但我有一个给定的实现问题。 我的g值是IEnumerable <匿名类型>(或IGrouping <匿名类型>?),我的func不能接受匿名类型作为参数 – Archeg 2010-08-19 12:44:46
@Archeg:我编辑了答案,在底部添加了一个额外的例子。 – 2010-08-19 12:48:36
哇,thnx。至于我 - 非常酷的东西,当VS显示成员xA,xB在最后一个lambda =) thnx很多 – Archeg 2010-08-19 12:55:18