我正计算每个国家/地区的每月总计。我已设法按国家/地区分组数据,但我收到错误
已添加具有相同键的项目。
尝试将每月总计纳入内部字典时:
var totalPerMonth = data.AsEnumerable()
.Select(x => new
{
Date = Convert.ToDateTime(x.ItemArray[0]).ToString("yyyy-MM"),
Country = x.ItemArray[1],
Revenue = x.ItemArray[2]
})
.GroupBy(x => x.Country)
.ToDictionary(x => x.Key, x => x.ToDictionary(p => p.Date,////this is not unique/// p => Convert.ToDouble(p.Revenue)));
如何对其进行分组以使日期键唯一?
答案 0 :(得分:1)
您可以使用ToLookup
代替ToDictionary
来允许同一日期的多个值。
或者您可以使用分组来仅获取唯一日期(假设您要计算每个月的总计,因此请为每个日期组使用Sum
收入dg
):
var totalPerMonth = data.AsEnumerable()
.Select(x => new {
Date = Convert.ToDateTime(x.ItemArray[0]).ToString("yyyy-MM"),
Country = x.ItemArray[1],
Revenue = Convert.ToDouble(x.ItemArray[2]) // convert here
})
.GroupBy(x => x.Country)
.ToDictionary(
g => g.Key,
g => g.GroupBy(x => x.Date).ToDictionary(dg => dg.Key, dg => dg.Sum(x => x.Revenue))
);