实体框架计数和集合中的分组

时间:2015-10-02 21:47:02

标签: c# entity-framework lambda

我有Lambda Expression返回正确过滤的数据,但我需要对返回的记录进行一些计算。

我有两个具有多对多关系的实体(用户和语言),我需要对返回者语言进行分组计数,以便找出每个返回语言的人数。

Lambda Expression返回的示例数据集:

  • User1(英语,西班牙语)
  • User2(英语,法语)
  • User3(英语,西班牙语)

期望的结果:

  • 英语3
  • 西班牙语2
  • 法语1

我尝试使用GroupBy()和select(),但只得到了结果的正确结果,但是想用Lambda做到这一点。

[编辑] 解决方案的关键是使用SelectMany()结合GroupBy()将结果展平。非常感谢@Christos正确答案。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

var results = data.SelectMany(user=>user.Languages)
                  .GroupBy(language=>language)
                  .Select(gr=>new { Language = gr.Key, Total = gr.Count()});

假设每个用户对象都有一系列字符串IEnumerable<string>,它们被称为语言并保存用户的语言。此外,您拥有的数据是所有用户的序列。