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