NHibernate - 使用LINQ等效的CountDistinct投影

时间:2009-08-11 16:11:09

标签: c# linq nhibernate

我正在尝试使用新的LINQ提供程序替换我用于具有LINQ查询的多字段搜索页面的Criteria查询。但是,我遇到记录计数的问题,以便我可以实现分页。我正在努力实现一个结果 相当于使用LINQ从Criteria API中的CountDistinct投影生成的。有没有办法做到这一点?

LINQ提供的Distinct()方法似乎没有按照我期望的方式运行,并将“.Distinct()。Count()”追加到按字段分组的LINQ查询的末尾我想要一个明确的count(一个整数ID列)似乎返回这些值的非独特计数。

如果需要,我可以提供我正在使用的代码,但由于有很多字段,所以它是 很长,所以如果不需要,我不想挤满这个帖子。

谢谢!

2 个答案:

答案 0 :(得分:2)

我想出了一种方法,尽管在所有情况下都不是最佳选择。实际上,在没有.Count()的情况下,在LINQ查询上执行.Distinct()实际上会在生成的SQL查询中生成“distinct”。如果我通过使用.Distinct()。ToList()然后在生成的内存中集合中使用.Count()方法来枚举查询,我得到我想要的结果。

这与我最初使用Criteria查询完全不同,因为计数实际上是在应用程序代码中完成的,并且必须将整个ID列表从DB发送到应用程序。但就我而言,鉴于ID数量很少,我认为它会起作用,并且不会产生太大的性能瓶颈。

但我希望将来能够实现真正的CountDistinct()LINQ操作。

答案 1 :(得分:0)

您可以尝试选择您想要首先计算的列。它看起来像:选择(p => p.id).Distinct()。Count()。您可以区分整个对象,它将比较对象的引用而不是实际值。