获取Distinct()之后IQueryable集合的真实计数

本文关键字:真实 集合 IQueryable Distinct 之后 获取 | 更新日期: 2023-09-27 18:10:47

我的代码:

IQueryable<string> keys = dr.Localization.GetQuery().Select(x => x.Key).Distinct();
int count = keys.Count();

收集keys区分后正常收集,良好。但在keys.Count()中,我有表的所有行数,没有不同的。我的ORM是NHibernate。

我能做些什么有真正的IQueryable集合计数?(不强制转换为其他集合类型)

谢谢!

获取Distinct()之后IQueryable集合的真实计数

似乎你的可查询提供程序有bug,你应该报告这个bug。

同时,正确计数的一种方法是使用keys.AsEnumerable().Count()。但是,这将导致整个集合的评估。因此,如果结果集合有许多项,您将检索它们以获得计数。

您可以尝试的另一个选项是使用keys.GroupBy(k => k).Count()之类的东西,或者可能没有Distinct(),并希望在这种情况下也不存在相同的错误。

除非对Count()的调用没有转换为只选择计数的SQL查询,否则Count()扩展方法无论如何都必须枚举所有对象。由于您已经将键放入变量中,我假设您稍后需要它,可能会枚举它。所以你可以在这里取回它们,像这样

string[] keys = dr.Localization.GetQuery().Select(x => x.Key).Distinct().ToArray();
int count = keys.Length;

但我很好奇,在你的例子中,这产生了什么(查询和结果):

int count = dr.Localization.GetQuery().Select(x => x.Key).Distinct().Count();