LINQ非平凡分组

LINQ非平凡分组,linq,linq-to-entities,group-by,linq-group,Linq,Linq To Entities,Group By,Linq Group,我有以下几个类(请省略语法错误) 类消息{ 公众人物接受者 ... } 班主任{ 公共列表组 ... } 班级{ 公共组类型 ... } 我想按组类型生成邮件计数。 例如: 向“X组”(T1型)“Y组”(T2型)中的“人员A”发送消息“你好” 消息“blah”,发送给“Z组”中的“人员B”(类型T1) 我需要的查询将输出: 组类型:T1,消息计数:2 组类型:T2,消息计数:1 如何在Linq To Entities中实现这一点? 考虑到一个人可能是零组 我知道如何在内存中实现这一点,但我想使

我有以下几个类(请省略语法错误)

类消息{
公众人物接受者
...
}
班主任{
公共列表组
...
}
班级{
公共组类型
...
}
我想按组类型生成邮件计数。 例如:

  • 向“X组”(T1型)“Y组”(T2型)中的“人员A”发送消息“你好”
  • 消息“blah”,发送给“Z组”中的“人员B”(类型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]++;
        }
    }
    
    字典计数=新建。。。
    foreach(db.Messages中的消息msg){
    foreach(msg.Recipient.Groups中的组){
    计数[组.组类型]++;
    }
    }
    
    这对于
    SelectMany

      var result = messages
        .SelectMany(m => m.Recipient.Groups)
        .GroupBy(t => t.GroupType)
        .Select(g => new { gType = g.Key, count = g.Count()});
    
    然后在LinqPad中找到result.Dump()


    我的测试代码的完整来源如下:

    这对于
    SelectMany

      var result = messages
        .SelectMany(m => m.Recipient.Groups)
        .GroupBy(t => t.GroupType)
        .Select(g => new { gType = g.Key, count = g.Count()});
    
    然后在LinqPad中找到result.Dump()

    我的测试代码的完整源代码如下: