返回一个IEnumerable?

时间:2014-02-20 21:16:24

标签: c# asp.net asp.net-mvc-3 ienumerable

这是返回IEnumerable还是IQueryable

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

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

3 个答案:

答案 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方法,如WhereSelect在数据库中执行原始IQueryable<T>查询后的集合。

答案 2 :(得分:1)

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

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