这是返回IEnumerable
还是IQueryable
?
public IEnumerable<OrderRecord> GetAll()
{
return _repository.Table.Where(x => x.ClientAccount.Id == _userSession.GetCurrentClientAccount()).AsEnumerable();
}
然后,使用断点@ IEnumerable
,它不会返回IEnumerable
吗?
为什么在Queryable
(调试的第一行)中说NHibernate.Linq.NhQuerable
?
答案 0 :(得分:7)
返回实现IEnumerable<T>
的内容。同时该事物实现IQueryable<T>
的事实并不重要。
同样适用于例如以下情况:
public ICollection<string> GetCollection()
{
return new List<string>();
}
如果您尝试检查从GetCollection
返回的内容,您将在该示例中获得实际的班级名称List<string>
。但是因为方法签名声明它返回ICollection<T>
,所以你只能访问由ICollection<T>
接口公开的方法/属性(ofc。除非你明确地将它强制转换回List<string>
)。
答案 1 :(得分:3)
NhQueryable<T>
同时实现IQueryable<T>
和IEnumerable<T>
。
通过调用AsEnumerable()
,您现在可以访问IEnumerable<T>
方法,例如,从内存中运行其他LINQ方法,如Where
和Select
在数据库中执行原始IQueryable<T>
查询后的集合。
答案 2 :(得分:1)
返回Nhibernate.Link.NhQueryable<ACCS.StockControl.Models.OrderRecord>
类型的对象。
该类型恰好实现了IQueryable<ACCS.StockControl.Models.OrderRecord>
,IEnumerable<ACCS.StockControl.Models.OrderRecord>
和IEnumerable
interfaces。