我有一个对象“ 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/

10-08 21:43