简介
就像与nhibernate相关的this question一样,我想知道Entity Framework 6是否存在这样的东西。我做了一些研究,但没有找到任何可用的东西。
除了使用.Skip(x)
和.Take(y)
查询分页结果外,我们还希望在应用分页之前获取与 where子句匹配的所有项的计数。
我们现在将LINQ查询与 where子句应用于变量中,因此我们可以使用它两次,一次获取计数,一次获得分页结果。
但出于性能原因,我们希望在一个查询中同时执行这两个操作,就像在RAW SQL查询中使用COUNT(*) OVER()一样。
问题
实体框架是否以某种方式支持COUNT(*) OVER()
?如果没有,你能否指出从哪里开始寻找实现这一点。
提案
首先我考虑创建一个IQueryable<T>
扩展方法:CountOver(out long totalCount)
,但这可能不起作用,因为我们仍在构建查询。
然后我考虑引入一个我们可以在实体模型中使用的属性[CountOver]
:
public class Person
{
public string Fullname { get; set; }
[CountOver]
public long TotalCount { get; set; }
}
如果我们可以修改源代码,后者不会那么难实现,但目前我不知道这是否可能......
答案 0 :(得分:2)
没有。 LINQ没有概念上转换为COUNT()OVER()的查询运算符。但是您可以将查询重用于Count()的行,并选择其结果。
例如
之类的东西context