1

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

class Message {
   public Person Recipient
   ...
}

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

class Group {
   public GroupTypesEnum GroupType
   ...
}

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

  1. 消息“你好”,发给“X 组”(T1 类型)、“Y 组”(T2 类型)中的“人员 A”
  2. 消息“blah”,发给“Z 组”中的“人 B”(类型 T1)

我需要的查询将输出:

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

如何在Linq To Entity 中实现这一点?
考虑到一个人可能属于零组

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

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

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

1 回答 1

1

This is not so hard with SelectMany

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

Then result.Dump() - in LinqPad

result

Full source for my test code is here: https://gist.github.com/hoganlong/5841555

于 2013-06-22T03:48:36.100 回答