2013-06-21 70 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