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 に答える