使用GroupBy和Sum作为键/值创建字典

时间:2013-04-10 11:58:21

标签: c# .net linq

我有消息类,如

public class Message
{
  public int Id {get;set;}
  public string Name {get;set;}
  public ICollection<MessageProperty> Properties {get;set;}
}

public class MessageProperty
{
  public string Key {get;set;}
  public string Value {get;set;}
}

我想要一个Dictionary<string, int>,其密钥为“语言”,以及语言匹配的所有消息的总和值。

所以我最终得到Key:"en-GB", Value:123

我目前正在使用IEnumerable<Message>来获取信息。

我知道我必须做一个GroupBy和Sum,但我尝试过的所有东西都没有用。

你可以告诉我如何获得这本字典吗?感谢

更新:我的Enumerable中的每条消息都希望

{
   "id":1,
   "name":"test",
   "properties":[
      {
         "Key":"language",
         "Value":"en-gb"
      },
      {
         "Key":"gender",
         "Value":"male"
      },
      {
         "Key":"klout",
         "Value":10
      }
   ]
}

1 个答案:

答案 0 :(得分:3)

这将从所有消息中选择所有属性,然后根据键创建字典并计算每个键出现的次数

messages.SelectMany(message => message.Properties)
        .Where(prop => prop.Key == "language")
        .GroupBy(prop => prop.Value)
        .ToDictionary(grp => grp.Key,
                      grp => grp.Count());