2011-10-06 11 views
1

辞書のリストは<String, String>です。辞書には、収益と月のキーがあります。グループディクショナリ辞書キー(C#)

一般的なエントリは次のようになります。収入=「10.080」、月=「2011分の1」

私は、各月の売上合計を取得したいと思いますので、私が試した:

List<decimal> monthsTotals = data.Select(d => Convert.ToDecimal(d["Revenue"])) 
    .GroupBy(d => d["Month"]).ToList<decimal>(); 

これは動作しません。式d["Month"])に下線が引かれています。

[]付きのインデックス付けを 'decimal'型の式に適用できません。

答えて

3
List<decimal> monthsTotals = data 
    .GroupBy(d => d["Month"]) 
    .Select(d => d.Sum(r => Convert.ToDecimal(r["Revenue"]))) 
    .ToList<decimal>(); 
6

あなたSelectの結果はだけ収入です。あなたはその情報の残りすべてを失っています。私はあなたが欲しい疑う:

Dictionary<string, decimal> revenueByMonth = 
    data.GroupBy(d => d["Month"], d => decimal.Parse(d["Revenue"])) 
     .ToDictionary(group => group.Key, group => group.Sum()); 

最初のステップは、IGrouping<string, decimal>作成 - 各月のすなわち、収入値のシーケンス。

第2ステップでは、グループキー(月)を辞書キーとし、グループ値の合計を辞書値として、Dictionary<string, decimal>に変換します。

+0

はい、正しいですが、ある種の辞書を作成するのが私の次のステップでした。 – AGuyCalledGerald

+0

@ Jan-FrederikCarl:とりわけ、 'List 'を作成しても、私が見る限り、有用な情報は得られません。 –

0

これらの辞書を役立つものに変えます。

public class RevenueData 
{ 
    public decimal Revenue {get;set;} 
    public string Month {get;set;} 
} 

List<RevenueData> result = data 
    .Select(d => new RevenueData() 
    { Revenue = Convert.ToDecimal(d["Revenue"]), Month = d["Month"] }) 
    .GroupBy(x => x.Month) 
    .Select(g => new RevenueData() 
    { Revenue = g.Sum(x => x.Revenue), Month = g.Key }) 
    .ToList();