2010-05-02 128 views
1

我有一个像的LINQ聚合函数

列表

“测试”,“喇嘛”,“东西”,“其他”

但是,当我使用Aggrate它,并在平均时间调用一个函数在我看来,经过2'迭代'的第一个结果传入?

我使用它,如:

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

,虽然我把一个断点在上在myList中信息的某些转变发生的someMethod功能,我注意到,第三个呼叫后,我得到的结果以前的转换作为输入参数。

+5

我认不出什么东西被要求在这里;我建议你发布你正在使用的代码,并描述预期/实际结果。 – Aaronaught 2010-05-02 15:21:00

+0

@Aarounaught它不是那么神秘(如果你使用了Aggregate),那么我们只是将OP混淆在聚合函数的参数上 – eglasius 2010-05-04 18:50:10

+0

[LINQ Aggregate algorithm explain]的可能重复(http://stackoverflow.com/questions/7105505/LINQ聚集算法解释的) – Jamiec 2015-10-05 14:49:16

回答

1

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

你已经标记为目前,它的意思是所有迄今已经积累的。在第一次调用时,种子是第一个元素。

你可以这样做:

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

这样的话,你只能每个元素上应用的someMethod一次。

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; 
          });