想象一个类,假设分页可以与 anIList<T>
或 an一起使用IQueryable<T>
。
该类将具有一个int TotalItems
属性,它将(并不奇怪)获取/设置可查询或可枚举参数的计数。
如果我IEnumerable<T>
用作参数,
//simplified
public Pagination(IEnumerable<T> query)
{
TotalItems = query.Count();
}
该Count()
方法将是(如果我没记错的话,这就是重点)Enumerable.Count()
。因此,即使查询是一个IQueryable<T>
(继承自IEnumerable<T>
),它也会被枚举(这显然不是“数据库查询”所希望的)。
那么当我实际上是一个时,有没有办法使用Queryable.Count()
方法,或者我是否必须改变我的设计,例如在这种情况下,有 2 ctorIEnumerable<T>
IQueryable<T>
//simplified
public Pagination(IEnumerable<T> query)
{
TotalItems = query.Count();
}
public Pagination(IQueryable<T> query)
{
TotalItems = query.Count();
}
编辑
我确实理解IQueryable<T>
继承与具有相同名称的扩展方法IEnumerable<T>
这一事实无关,IEnumerable<T>
并且IQueryable<T>
扩展方法具有相同的名称是很好的,“看起来它们做的一样”,但我认为它仍然有时会混淆...
好奇心的一般问题
它们是否是框架中具有相同“架构”的其他示例:继承+扩展方法的通用名称?