我有一个对象“ ChartObject”,我想将某些字段分组在一起,然后才能绘制整个列表。
public class ChartObject
{
public string Type { get; set; }
public int Year { get; set; }
public long Cost { get; set; }
}
我想将每年的类型分组,以防止每年重复的类型。对于每种类型,我都希望该年下的总成本。
例如,此列表:
ChartObject(Type1,2015,$ 10)
ChartObject(Type1,2015,$ 20)
ChartObject(Type2,2016,$ 10)
ChartObject(Type1,2016,$ 10)
ChartObject(Type2,2017,$ 10)
ChartObject(Type2,2017,$ 10)
应该结合到这个:
ChartObject(Type1,2015,$ 30)
ChartObject(Type1,2016,$ 10)
ChartObject(Type2,2016,$ 10)
ChartObject(Type2,2017,$ 20)
到目前为止,这是我的LINQ查询。这是不正确的,因为它也不按年份分组:
List<ChartObject> coList = GetItems();
var query =
(
from l in coList
group l by l.Type into X
select new ChartObject()
{
Cost = X.Sum(c => c.Cost),
Type = X.First().Type,
Year = X.First().Year,
}
).ToList();
最佳答案
通用方法如下:
// First GroupBy compound type
.GroupBy(i => new { i.Type, i.Year })
// Then select from the Group Key and
// apply an Aggregate/query on the Grouped Values
.Select(g => new {
Type = g.Key.Type, // Pull out key values
Year = g.Key.Year,
Cost = g.Sum(i => i.Cost) // Sum all items in group
})
关于c# - LINQ如何使用“分组依据”来简化具有重复属性的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30227086/