1

我有一个按月分组价格的 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}

4

1 回答 1

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我认为通常更清洁的方法;当然,如果需要,请更改它。)

于 2013-01-08T22:05:00.473 回答