获取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集合计数?(不强制转换为其他集合类型)
谢谢!
似乎你的可查询提供程序有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();