实体框架是否支持COUNT(*)OVER()

时间:2017-09-19 17:58:16

标签: c# entity-framework entity-framework-6 linq-to-entities

简介

就像与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; }
}

如果我们可以修改源代码,后者不会那么难实现,但目前我不知道这是否可能......

1 个答案:

答案 0 :(得分:2)

没有。 LINQ没有概念上转换为COUNT()OVER()的查询运算符。但是您可以将查询重用于Count()的行,并选择其结果。

例如

之类的东西
context