2013-04-10 67 views
1

我有消息类,如创建具有的GroupBy和点心作为字典键/值

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和一个总和,但我所尝试过的所有事情都没有效果。

你能告诉我如何得到这本词典吗?由于

UPDATE:我可枚举每个消息想

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

回答

3

这会选择所有消息的所有属性,然后创建一个基于密钥的字典并计算每个键有多少次出现

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

我需要检查MessageProperty是否具有Key属性值“语言” – Jon 2013-04-10 12:03:35

+0

将示例数据添加到您的问题并给予预期行为 – 2013-04-10 12:05:26

+0

刚刚添加,谢谢! – Jon 2013-04-10 12:12:42

相关问题