2011-10-06 113 views
1

我有一个字典列表的类型<String, String>。字典的关键字是收入和月份。词典键(C#)字典组列表字典

的典型条目可能是:收入= “10.080”,月= “1/2011”

我想获得的收入总和每月,所以我尝试:

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> - 即每月收入值的序列。

第二步是将组密钥(月份)作为词典关键字,并将组值的总和作为词典值,将其转换为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();