Linq在一次迭代中选择和聚合

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中的副作用.=)

  • 我想你已经把它钉在了詹斯那里。谢谢。 (2认同)