c# - LINQ 复合聚合

标签 c# linq

我有一个简单的 LINQ 问题:

我有一个 FooBar 集合。 Foobar 具有 foo 属性和 bar 属性。 我想聚合 foo 和 bar,而不需要多次运行我的 foobar 集合。

即。我想要类似于 SQL 的东西:

SELECT SUM(Foo), SUM(Bar) From FooBars

int fooSum, barSum;
foreach (var foobar in foobars)
{
   fooSum += foobar.Foo;
   barSum += foobar.Bar;
}

是否有一种优雅的方法可以在 LINQ 中使用复合选择(或类似的)来编写此代码?

最佳答案

您可以使用Aggregate ,将运行总计保存在匿名类型或元组中。尽管我自己可能会使用简单的 foreach 循环。

var result = foobars.Aggregate(new { FooSum = 0, BarSum = 0 },
                               (a, x) => new {
                                                 FooSum = a.FooSum + x.Foo,
                                                 BarSum = a.BarSum + x.Bar
                                             });

Console.WriteLine("FooSum=" + result.FooSum + ", BarSum=" + result.BarSum);

关于c# - LINQ 复合聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5580997/

相关文章:

c# - 在 asp.net 中仅从 ListView 中获取最后一行值

c# - 将对象转换为其他数据类型的通用方法?

C# 值/引用传递?

c# - C# 中的 LinQ 和 DataTable 按问题分组

c# - 如何使用正则表达式和 linq to sql 进行字符串比较

c# - 图形 DrawImage 导致带有大红色 X 的错误

linq - 表达式转换为 linq 表达式时索引超出范围

.net - 将 Linq where 条件添加到通用 IQueryable<T>

c# - Linq 聚合对象和列表

c# - Windows Phone 7 中的媒体播放器