介绍
就像与nhibernate相关的这个问题一样,我想知道Entity Framework 6是否有类似的东西。我做了一些研究,但没有找到任何可用的东西。
除了使用.Skip(x)
和.Take(y)
查询分页结果外,我们还想在应用分页之前获取匹配所有where子句的所有项目的计数。
我们现在将包含where子句的LINQ查询放在一个变量中,这样我们可以使用它两次,一次用于获取计数,一次用于获取分页结果。
但出于性能原因,我们希望在一个查询中完成两个操作,就像在原始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; }
}
如果我们能够修改源代码,那么实现起来就不会那么困难,但目前我甚至不知道这是否可能...
CROSS JOIN
并使用两次相同的子查询进行 +/-。你知道这对 MSSQL 2016 的性能有何影响吗? - huysentruitwq.Count()
和q.Skip(x).Take(y)
要慢33%。 - huysentruitw