首页 > 解决方案 > 使用 LINQ 对列进行分组并添加新的聚合字段

问题描述

我有一个这样的数据集:

car,color,price
Audi,RED,12000
Audi,BLUE,17000,
Audi,BLUE,16000
Seat,BLUE,12500
Fiat,RED,14800
.
.

请注意,颜色只能有两个值(RED 和 BLUE)。

我需要返回报告数据集:

car, totalprice, totalpriceRED, totalPriceBLUE
Audi, 45000, 12000, 33000
Seat, 12500, 0 , 12500
.

按汽车分组,但还添加了聚合列(一个用于总金额,两个用于按颜色计算的金额)。有些汽车可能没有某种颜色,因此该颜色的对应总数为 0

我正在尝试使用 LINQ 和 C# 来做到这一点,但我找不到像这样进行分组的方法。如果有人可以提供帮助,我将不胜感激。

标签: c#linqgrouping

解决方案


首先,您必须按汽车分组,然后构造一个包含总价和每种颜色的总价的新对象,您可以使用Sum构造该对象

cars.GroupBy(x => x.car).Select(x => new
 {
 car = x.Key,
 totalprice = x.Sum(y => y.price),
 totalpriceRed = x.Where(y => y.color == "RED").Sum(y => y.price),
 totalpriceBlue = x.Where(y => y.color == "BLUE").Sum(y => y.price)
 });

在线演示:https ://dotnetfiddle.net/NmmUKb


推荐阅读