林克错过了几个月

时间:2013-01-08 21:58:15

标签: .net linq

我有一个linq,按月分组价格完美无缺,除了我看不到没有数据的月份。我所期待的如果一个月没有数据价格应为0。

List<decimal> osman1 = osman.GroupBy(i => new 
{ 
    Field1 = i.Field<DateTime>("CreateDate").Month 
})
.Select(group => group.Sum(i => Convert.ToDecimal(i["Price"])))
.ToList();

结果osman1是

  

{221,103,352}

我需要的是

  

{0,0,0,0,0,0,0,221,0,103,352,0}

1 个答案:

答案 0 :(得分:3)

最简单的方法可能是进行群组加入:

var totalsByMonth = Enumerable.Range(1, 12)
      .GroupJoin(osman,
                 month => month,
                 record => record.Field<DateTime>("CreateDate").Month,
                 (month, records) => records.Sum(r => r.Field<decimal>("Price")))
      .ToList();

(我使用Field<decimal>而不是Convert.ToDecimal,因为我认为它通常更干净;当然,如果您需要,请更改它。)