创建一个以GroupBy和Sum为键/值的字典

本文关键字:字典 为键 Sum 一个以 GroupBy 创建 | 更新日期: 2023-09-27 18:08:21

我有Message类,如

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,但我尝试过的所有方法都不太奏效。

你能告诉我怎么买这本字典吗?由于

UPDATE:我的Enumerable中的每个Message都想要

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

创建一个以GroupBy和Sum为键/值的字典

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

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