2013-06-21 67 views
1

我有以下類(忽略語法錯誤請)LINQ不平凡集團通過

class Message { 
    public Person Recipient 
    ... 
} 

class Person { 
    public List<Group> Groups 
    ... 
} 

class Group { 
    public GroupTypesEnum GroupType 
    ... 
} 

我想生成由組類型信息的計數。 實施例:

  1. 消息 「你好」,以 「人A」,這是在 「組X」(類型T1), 「組Y」(類型T2)
  2. 消息 「等等」,以「人B」,這是在 「組Z」(類型T1)

,我需要查詢將輸出:

組類型:T1,消息計數:2
組類型:T2,消息計數:1

如何在Linq To Entities中實現此目標?
考慮,一個人可能在零組

我知道如何在內存中實現這​​一點,但我想使用LINQ到實體:

Dictionary<GroupTypesEnum, int> count = new ... 

foreach (Message msg in db.Messages) { 
    foreach (Group group in msg.Recipient.Groups) { 
     count[group.GroupType]++; 
    } 
} 

回答

1

這是不是很難與SelectMany

var result = messages 
    .SelectMany(m => m.Recipient.Groups) 
    .GroupBy(t => t.GroupType) 
    .Select(g => new { gType = g.Key, count = g.Count()}); 

然後result.Dump() - 在LinqPad

result

我的測試代碼的完整源代碼位於:https://gist.github.com/hoganlong/5841555