如何制作2个字典并将其分组两次

时间:2017-03-29 16:50:56

标签: c# .net linq

我正计算每个国家/地区的每月总计。我已设法按国家/地区分组数据,但我收到错误

  

已添加具有相同键的项目。

尝试将每月总计纳入内部字典时:

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)));

如何对其进行分组以使日期键唯一?

1 个答案:

答案 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))
    );