例如,我有一个 type 的通用列表Element
。
public class Element
{
public string Country { get; set; }
public string City { get; set; }
public int Population { get; set; }
}
有了以下数据。
var elements = new List<Element>
{
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie2", Population = 12 },
new Element { Country = "Country A", City = "Barrie2", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country D", City = "Essex", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country D", City = "Essex", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 },
new Element { Country = "Country A", City = "Barrie", Population = 12 }
};
本质上,我想要按国家和城市分组的人口总数。
就像是。
Country A | Barrie | `running total for Barrie`
Country A | Barrie2 | `running total for Barrie2`
| | `total for Country A`
Country D | Essex | `running total for Essex`
| | `total for Country D`
| | `total for everything`
我在任何地方都找不到扩展(我说扩展是因为我计划多次使用汇总),所以我想我会试一试。所以我从这个简单的查询开始。
var groupedElements = elements
.GroupBy(x => new { x.Country, x.City })
.Select(x => new { Country = x.Key, City = x.Select(xx => xx.City), Population = x.Sum(xx => xx.Population) })
.ToList();
这个查询按预期工作,所以我认为我在正确的轨道上。接下来我想我必须弄清楚哪个属性groupedElements
是聚合的,因为这就是我们要做的汇总。我该如何做到这一点?或者也许我可以有一个参数,让我指定我希望在哪个列上执行聚合函数。