我已经读过有关IEnumerable和IQueryable的内容,我已经读过,使用linq可以更好地使用IQueryable,因为当你使用where子句时它会创建它需要的确切查询,但是使用IEnumerable它会从数据库中检索所有行,然后在内存上进行过滤。 / p>
这里的确切问题: 这是一样的吗?
如何更好的方式?
public ActionResult Index()
{
var positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null);
return View(positions.ToList());
}
public ActionResult Index()
{
IQueryable<positions> positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null);
return View(positions.ToList());
}
答案 0 :(得分:1)
var
表示编译器自动推断出该类型。基本上,如果数据源是IQueryable
(例如,实体框架或Linq to SQL datacontext,RIA服务等),您的变量也将是IQueryable
。如果数据源是IEnumerable
(例如内存中的对象集合),则您的变量也将是IEnumerable
。
由于IQueryable<T>
继承自IEnumerable<T>
,因此可以使用IQueryable
扩展方法将IEnumerable
视为AsEnumerable
。调用AsEnumerable
之后的所有内容都将在本地执行,而不是转换为数据源语言(SQL,HTTP REST ...)。