返回一个 IEnumerable



这是返回IEnumerable还是IQueryable

public IEnumerable<OrderRecord> GetAll()
{
    return _repository.Table.Where(x => x.ClientAccount.Id == _userSession.GetCurrentClientAccount()).AsEnumerable();
}   

然后,使用断点@IEnumerable,它不返回IEnumerable吗?为什么它在NHibernate.Linq.NhQuerable(调试的第一行)中说Queryable

它返回一些实现IEnumerable<T>的东西。事实上,同时那个东西实现了IQueryable<T>并不重要。

这同样适用于例如以下情况:

public ICollection<string> GetCollection()
{
    return new List<string>();
}

如果您尝试检查从GetCollection返回的内容,您将获得实际的类名,List<string>在该示例中。但是由于方法签名声明它返回ICollection<T>因此您只能访问ICollection<T>接口(ofc.除非您显式将其强制转换为List<string>)公开的方法/属性。

NhQueryable<T>同时

实现了IQueryable<T>IEnumerable<T>

通过调用 AsEnumerable() ,您现在可以访问IEnumerable<T>方法,例如,在数据库中执行原始IQueryable<T>查询后,这些方法将从内存中集合中运行其他 LINQ 方法,如 WhereSelect

它返回一个类型为 Nhibernate.Link.NhQueryable<ACCS.StockControl.Models.OrderRecord> 的对象。

该类型恰好实现了IQueryable<ACCS.StockControl.Models.OrderRecord>IEnumerable<ACCS.StockControl.Models.OrderRecord>IEnumerable接口。

最新更新