这是对这个问题的跟进。
TLDR:
问题:
我想过滤查询以仅保留每个唯一 ID 的前 n 行。
答案:
query = query.GroupBy(q => q.ID).SelectMany(g => g.Take(n));
这个答案的问题在于,对于超过 80,000 行,评估查询所花费的时间比通过迭代 ( foreach
) 过滤要长得多(至少慢两倍)。查看此答案生成的 SQL,CROSS APPLY
使用了 a,最有可能用于SelectMany()
.
这个链接描述了什么CROSS APPLY
:
APPLY 运算符允许您连接两个表表达式;每次从左表表达式的每一行处理右表表达式。
简而言之,我正在寻找一个过滤查询,它可以有效地收集N
每个唯一的顶行ID
。
具有解释性 SQL 的 Linq 解决方案将是理想的。