对于我的生活,我不能弄清楚如何使用linq来解决这个问题。也许我的语法已关闭。
给出以下对象:
Data
-----------
string type
string number
string value
我有一个IEnumerable<Data>
个对象。我基本上想要返回1个Data对象,其值总结(在这种情况下类型和数字将是相同的)。
最初我认为这是Aggregate()
函数的一个案例,但我似乎无法使语法正确。
虽然我明白这是不正确的,但这是我所拥有的:
var results = thisData.Aggregate(new Data(), (data, item) => { item.value?? });
谢谢!
更新
我想我可能没有很好地问我的问题。在此过程结束时,我只想要包含类型,数字和总和(或聚合)值的1条记录。是否有一种简单优雅的方法来实现这一目标?
答案 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, *}
的组。