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

发布于 2024-12-10 03:53:54 字数 622 浏览 0 评论 0原文

我读过有关 IEnumerable 和 IQueryable 的内容,我读到 IQueryable 与 linq 配合使用效果更好,因为当您使用 where 子句时,它会创建所需的精确查询,但使用 IEnumerable 时,它​​会从数据库中检索所有行,然后在内存上进行筛选。

确切的问题在这里: 这是一样的吗?

更好的方法是怎样的呢?

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());
        }

I have read about IEnumerable and IQueryable, I have read that IQueryable is better with linq because when you use where clauses it creates the exact query it needs, but with IEnumerable it retrieves all rows from database and then filters on memory.

The exact question here:
Is this the same?

How is the better way?

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());
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏九 2024-12-17 03:53:54

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

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

var means that the type is automatically inferred by the compiler. Basically, if the data source is an IQueryable (e.g. an Entity Framework or Linq to SQL datacontext, a RIA service, etc), your variable will also be an IQueryable. If the data source is an IEnumerable (e.g. an in-memory collection of objects), your variable will also be an IEnumerable.

Since IQueryable<T> inherits from IEnumerable<T>, any IQueryable can be treated as an IEnumerable, by using the AsEnumerable extension method. Everything that follows the call to AsEnumerable will be executed locally rather than translated to the data source language (SQL, HTTP REST...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文