有没有办法用 linq 做到这一点而不用枚举 fooCollection
两次?
var fooCollection = // get foo
var selectedIds = new List<int>();
var aggregateContent = String.Empty;
foreach (var f in foo)
{
selectedIds.Add(foo.Id);
aggregateContent += foo.Content
}
var results = new FooResults
{
Content = aggregateContent,
SelectedIds = selectedIds
};
return results;
最佳答案
是的,您可以使用 Enumerable.Aggregate方法:
var result = fooCollection.Aggregate(new FooResult(),
(r,f) =>
{
r.SelectedIds.Add(f.Id);
r.Content += f.Content;
return r;
});
这样做的好处是没有副作用。我不喜欢 LINQ 中的副作用。 =)
关于c# - Linq 在单次迭代中选择和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936501/