在Distinct()之后获得IQueryable集合的真实数量

时间:2011-10-06 15:01:28

标签: c# count distinct iqueryable

我的代码:

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

集合keys在收集后有正常的收集,这很好。 但是在keys.Count()中,我的所有行的数量都没有明显。 我的ORM是NHibernate。

如何才能真正计算IQueryable集合?(不对其他集合类型进行强制转换)

谢谢!

2 个答案:

答案 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();