我的代码:
IQueryable<string> keys = dr.Localization.GetQuery().Select(x => x.Key).Distinct();
int count = keys.Count();
集合keys
在收集后有正常的收集,这很好。
但是在keys.Count()
中,我的所有行的数量都没有明显。
我的ORM是NHibernate。
如何才能真正计算IQueryable集合?(不对其他集合类型进行强制转换)
谢谢!
答案 0 :(得分:0)
您的可查询提供程序似乎有问题,您应该报告该错误。
同时,正确获得计数的一种方法是使用keys.AsEnumerable().Count()
。但是,这将导致整个集合的评估。因此,如果生成的集合包含许多项目,您只需检索它们即可获得计数。
您可以尝试的其他选项是使用类似keys.GroupBy(k => k).Count()
的内容,或者可能使用Distinct()
之类的内容,并希望在这种情况下也不会出现相同的错误。
答案 1 :(得分:0)
除非对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();