LINQ不是琐碎的Group By

时间:2013-06-21 19:01:46

标签: linq linq-to-entities group-by linq-group

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

class Message {
   public Person Recipient
   ...
}

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

class Group {
   public GroupTypesEnum GroupType
   ...
}

我想按组类型生成消息计数。 例如:

  1. 消息“你好”,到“人A”,在“组X”(类型T1),“组Y”(类型T2)
  2. 消息“blah”,到“人B”,在“Z组”(T1型)
  3. 我需要的查询将输出:

    组类型:T1,消息计数:2
    组类型:T2,消息计数:1

    如何在 Linq To Entities中实现这一目标?
    考虑到一个人可能属于零个群体

    我知道如何在内存中实现这​​一点,但我想使用Linq-To-Entities:

    Dictionary<GroupTypesEnum, int> count = new ...
    
    foreach (Message msg in db.Messages) {
        foreach (Group group in msg.Recipient.Groups) {
             count[group.GroupType]++;
        }
    }
    

1 个答案:

答案 0 :(得分:1)

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() -

result

我的测试代码的完整来源是:https://gist.github.com/hoganlong/5841555