想象一个类,假设分页可以与 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>扩展方法具有相同的名称是很好的,“看起来它们做的一样”,但我认为它仍然有时会混淆...
好奇心的一般问题
它们是否是框架中具有相同“架构”的其他示例:继承+扩展方法的通用名称?