我有消息类,如
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
}
]
}
答案 0 :(得分:3)
这将从所有消息中选择所有属性,然后根据键创建字典并计算每个键出现的次数
messages.SelectMany(message => message.Properties)
.Where(prop => prop.Key == "language")
.GroupBy(prop => prop.Value)
.ToDictionary(grp => grp.Key,
grp => grp.Count());