c# - Linq 仅查询每个唯一 ID 的前 N ​​行

标签 c# sql linq linq-to-sql

假设我有一个 IQueryable,它将返回一个具有 ID 属性(列)的数据类型。

我想进一步过滤我的查询(我不想评估查询)如下:

对于来自主查询的每个唯一ID,我想要Take(n),其中n 是某个任意数字。

也就是说,我只想保留每个唯一 ID 的前 n 行。

我可以获得不同的ID...

var ids = query.Select(q => q.ID).Distinct();

我可以 Take(n) 和其他人一起,但我很难将两者联系起来:

query = query.<FOR EACH DISTINCT ID>.Take(n);

接受的答案有效,但对于大表来说速度很慢。我写了this question作为后续行动。

最佳答案

你可以这样做:

query = query.GroupBy(q => q.ID).SelectMany(g => g.Take(n));

GroupBy 将具有相同ID 的记录聚集在一起,让您将它们作为一个组来处理; SelectMany 获取每个组,将其成员数限制为 n,然后将结果放回一个平面列表中。

关于c# - Linq 仅查询每个唯一 ID 的前 N ​​行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728903/

相关文章:

c# - 没有用户名/密码的 Exchange Web 服务授权

php - (我的)带有 MAX 和 LEFT JOIN 的 SQL 查询

php - 检索行数并在没有行时返回 0

java - 哪种 Java 数据类型对应于 Oracle SQL 数据类型 NUMERIC?

sql - StartsWith 的 Linq-to-sql 查询错误

c# - 检查列表是否包含一个属性相同的对象的优雅方法,并且仅在另一个属性的日期较晚时才替换

c# - 如何构建项目...启动 WPF 应用程序的 Windows 服务

c# - Excel 数据到 TreeView C#

c# - 为什么 IEnumerable.ToList 会产生新的对象

c# - 嵌套的 foreaches 到链式 linq 表达式中