【发布时间】:2014-07-13 08:55:05
【问题描述】:
假设我有以下内容
var list = new []{
new { Price = 1000, IsFirst = true},
new { Price = 1100, IsFirst = false},
new { Price = 450, IsFirst = true},
new { Price = 300, IsFirst = false}
};
我想生成以下输出:
Price IsFirst First Second Final
----------------------------------
1000 True 1000 0 1000
1100 False 0 1100 -100
450 True 450 0 350
300 False 0 300 50
是否可以将某种聚合函数处理到当前行?我喜欢将所有东西都放在纯 LINQ 中,但到目前为止,我别无选择,只能手动迭代列表并有条件地对列求和。
var result = list.Select(x => new
{
Price = x.Price,
IsFirst = x.IsFirst,
First = x.IsFirst ? x.Price : 0,
Second = !x.IsFirst ? x.Price : 0,
Final = 0 // ???
}).ToList();
int sum = 0;
for(int i=0; i<result.Count(); i++)
{
sum += (result[i].IsFirst ? result[i].Price : - result[i].Price);
// updating Final value manually
}
【问题讨论】:
-
如果你在玩
IEnumerable而不是IQueryable这应该可以stackoverflow.com/questions/1834753/…