代码之家  ›  专栏  ›  技术社区  ›  XVargas

LINQ到实体回拉整个表

  •  1
  • XVargas  · 技术社区  · 14 年前

            var userFeed = GetFeed(db); // Query to pull back all data
            userFeed = FilterByUser(userFeed, user, db); // Filter for the user
            userFeed = SortFeed(userFeed, page, sortBy, typeName); // Sort it
    

    返回的数据正是我所需要的,但是当我查看SQL概要文件跟踪时,我可以看到获取此数据的查询并没有在数据库级别对其进行过滤,而是选择表中的所有数据。

    在遍历视图上的结果之前,不会执行此查询。所有这些函数都返回IEnumerable对象。

    我的印象是LINQ会使用我所有的过滤器并形成一个查询来提取我想要的数据,而不是提取所有的数据然后在服务器上进行过滤。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Jesper    14 年前

    如果GetFeed返回IEnumerable,FilterByUser将接收IEnumerable。当它调用某个LINQ操作符,即Where时,它将使用IEnumerable Where,它将开始询问信息,最终将下载整个表。将GetFeed的类型更改为IQueryable,以确保改为调用IQueryable的LINQ运算符,这将继续延迟查询。