我有以下类(请省略语法错误)
class Message {
public Person Recipient
...
}
class Person {
public List<Group> Groups
...
}
class Group {
public GroupTypesEnum GroupType
...
}
我想按组类型生成消息计数。 例如:
我需要的查询将输出:
组类型: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]++;
}
}
答案 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() -
我的测试代码的完整来源是:https://gist.github.com/hoganlong/5841555