我有一个<String, String>
类型的词典列表。词典有关键收入和月。
典型条目可能是:Revenue =“10.080”,Month =“1/2011”
我想获得每个月的收入总额,所以我尝试了:
List<decimal> monthsTotals = data.Select(d => Convert.ToDecimal(d["Revenue"]))
.GroupBy(d => d["Month"]).ToList<decimal>();
这不起作用。表达式d["Month"])
带有下划线。
无法将带有[]的索引应用于“decimal”类型的表达式。
答案 0 :(得分: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>
。
答案 1 :(得分:3)
List<decimal> monthsTotals = data
.GroupBy(d => d["Month"])
.Select(d => d.Sum( r => Convert.ToDecimal(r["Revenue"])))
.ToList<decimal>();
答案 2 :(得分: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();