Linq聚合函数

时间:2010-05-02 15:18:39

标签: linq aggregate

我有一个像

这样的列表

“test”,“bla”,“something”,“else”

但是当我在它上面使用Aggrate并且同时调用一个函数时,我认为在2'迭代后'第一个的结果传入了吗?

我正在使用它:

myList.Aggregate((current, next) => someMethod(current) + ", "+ someMethod(next));

当我在someMethod函数中放置一个断点,其中myList中的信息发生了一些转换时,我注意到在第三次调用之后,我从前转换得到了一个结果作为输入参数。

2 个答案:

答案 0 :(得分:1)

这就是它打算工作的方式。

你标记为当前的东西,它意味着到目前为止已经积累的所有内容。在第一次调用时,种子是第一个元素。

您可以执行以下操作:

var res = myList
   .Aggregate(String.Empty, (accumulated, next) => accumulated+ ", "+ someMethod(next))
   .Substring(2);//take out the first ", "

这样,你只对每个元素应用someMethod一次。

答案 1 :(得分:0)

如果我的列表是字符串列表,并且我只想返回/操作某些项目,我通常会这样做:

     var NewCollection = MyStringCollection
                             //filter with where clause
                             .Where(StringItem => StringItem == "xyz"
                             //select/manipulate with aggregate
                             .Aggregate(default(string.empty), (av, e) =>
                             {
                                 //do stuff
                                 return av ?? e;
                             });