我有一个简单的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中使用复合选择(或类似)编写它有一种优雅的方法吗?
答案 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);