2013-01-08 32 views
1

我有一個按月分組的價格完美的linq,除非我看不到沒有數據的月份。我所期待如果一個月沒有數據的價格應該是0Linq丟失的月份

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

結果osman1是

{} 221103352

我需要的是

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

+0

[linq groupby Months可能重複並將任何丟失的月份添加到分組數據](http://stackoverflow.com/questions/5077006/linq-groupby-months-並添加任何丟失的月份到分組數據) –

回答

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因爲我認爲它通常清潔的;當然,如果需要的話更改它。)

+0

完美的解決方案。我需要更多的linq練習:)感謝您的幫助! – Mert

+0

@Mert:這裏最重要的是它是一個* group * join,而不是一個內部連接 ​​- 這意味着當「內部」集合中沒有匹配時,你得到一個組(一個空的組)。 –