这是返回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 方法,如 Where
和Select
。
它返回一个类型为 Nhibernate.Link.NhQueryable<ACCS.StockControl.Models.OrderRecord>
的对象。
该类型恰好实现了IQueryable<ACCS.StockControl.Models.OrderRecord>
、IEnumerable<ACCS.StockControl.Models.OrderRecord>
和IEnumerable
接口。