【发布时间】:2015-10-02 21:47:01
【问题描述】:
我有返回正确过滤数据的 Lambda 表达式,但我需要对返回的记录进行一些计算。
我有两个具有多对多关系的实体(用户和语言),我需要对返回者的语言进行分组计数,以便找出有多少人使用每种返回的语言。
Lambda 表达式返回的数据样本集:
- User1(英语、西班牙语)
- User2(英语、法语)
- User3(英语、西班牙语)
期望的结果:
- 英文3
- 西班牙语 2
- 法语 1
我尝试使用 GroupBy () 和 select (),但仅通过对结果进行 foreach 得到正确的结果,但想使用 Lambda 执行此操作。
[编辑] 解决方案的关键是使用 SelectMany () 与 GroupBy() 组合的结果扁平化。感谢@Christos 指出正确的答案。
【问题讨论】:
-
关系是
many-many,所以每种语言都应该有一些导航属性,比如Users,所以你可以简单地做var langInfo = context.Languages.Select(e => new { Language = e, Count = e.Users.Count }).ToList();之类的事情 -
我只需要对原始结果中包含的元素进行计数和分组。仅仅为了计数而重新查询的海岸是昂贵的。
-
你不需要查询所有用户来获取它的计数,如果你想知道如何,尝试谷歌搜索或搜索关于显式加载。当然,在这样做之前,
lazy loading应该先暂时禁用。如果您目前只有一些已加载的用户,请按照以下答案的方法(类似这样)。
标签: c# entity-framework lambda