LINQ复合聚合

时间:2011-04-07 12:27:51

标签: c# linq

我有一个简单的LINQ问题:

我有一系列FooBars。 Foobar酒店设有foo酒店和酒吧。 我想聚合foo和bar而不用多次运行我的foobars集合。

IE中。我想要一些与SQL相同的东西:

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

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

在LINQ中使用复合选择(或类似)编写它有一种优雅的方法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用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);