IEnumerable和IQueryable,当我使用var关键字时,它会使用哪个?

时间:2011-10-17 08:19:54

标签: entity-framework entity-framework-4 entity-framework-4.1

我已经读过有关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());
        }

1 个答案:

答案 0 :(得分:1)

var表示编译器自动推断出该类型。基本上,如果数据源是IQueryable(例如,实体框架或Linq to SQL datacontext,RIA服务等),您的变量也将是IQueryable。如果数据源是IEnumerable(例如内存中的对象集合),则您的变量也将是IEnumerable

由于IQueryable<T>继承自IEnumerable<T>,因此可以使用IQueryable扩展方法将IEnumerable视为AsEnumerable。调用AsEnumerable之后的所有内容都将在本地执行,而不是转换为数据源语言(SQL,HTTP REST ...)。