汇总对象列表的特定项目

时间:2011-02-24 22:57:49

标签: c# linq-to-objects

对于我的生活,我不能弄清楚如何使用linq来解决这个问题。也许我的语法已关闭。

给出以下对象:

Data
-----------
string type  
string number  
string value

我有一个IEnumerable<Data>个对象。我基本上想要返回1个Data对象,其值总结(在这种情况下类型和数字将是相同的)。

最初我认为这是Aggregate()函数的一个案例,但我似乎无法使语法正确。

虽然我明白这是不正确的,但这是我所拥有的:

var results = thisData.Aggregate(new Data(), (data, item) => { item.value?? });

谢谢!

更新
我想我可能没有很好地问我的问题。在此过程结束时,我只想要包含类型,数字和总和(或聚合)值的1条记录。是否有一种简单优雅的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

var results = thisData.Aggregate(new Data() 
                                 { 
                                   type = thisData.First().type, 
                                   number = thisData.First().number 
                                 } , (data, item) => data.value += item.value );

答案 1 :(得分:0)

尝试:

var results = thisData.Sum( d => int.Parse(d.value) );

这相当于:

var results = thisData.Aggregate( 0, (seed, d) => seed + int.Parse(d.value) );

也就是说,您只想添加值(当然它们是整数)。

仅当您的类型形成关于您所需操作的group(在数学意义上)时(例如总和),聚合才有意义。有一个组保证你可以使用中性元素(0)和操作(+)。

字符串形成一个包含{"", +}的组,整数形成一个包含{0, +}{1, *}的组。