Nic*_*ick 10 c# linq aggregate
有没有办法用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;
Run Code Online (Sandbox Code Playgroud)
Jen*_*ens 14
是的,您可以使用Enumerable.Aggregate方法:
var result = fooCollection.Aggregate(new FooResult(),
(r,f) =>
{
r.SelectedIds.Add(f.Id);
r.Content += f.Content;
return r;
});
Run Code Online (Sandbox Code Playgroud)
这具有无副作用的益处.我不喜欢LINQ中的副作用.=)