【问题标题】:Is a full list returned first and then filtered when using linq to sql to filter data from a database or just the filtered list?使用 linq to sql 过滤数据库中的数据时,是先返回完整列表,然后再过滤,还是仅返回过滤后的列表?
【发布时间】:2010-05-11 14:15:30
【问题描述】:

这可能是我在 MVC 项目中解决的一个非常简单的问题。这是我所说的一个例子。

我有一个链接到数据库的 rdml 文件,其中包含一个名为 Users 的表,该表有 500,000 行。但我只想找到 2010 年 5 月 7 日输入的用户。所以假设我在我的 UserRepository 中这样做:

from u in db.GetUsers() where u.CreatedDate = "5/7/2010" 选择 u
(从内存中执行此操作,所以如果出现以下情况,请不要杀我我的语法有点偏离,这是我正在寻找的概念)

此语句是先返回所有 500,000 行然后对其进行过滤,还是仅返回过滤后的列表?

【问题讨论】:

    标签: asp.net-mvc linq linq-to-sql


    【解决方案1】:

    自从您在 ITable 返回 IQueryable<T> 数据源的顶部构建表达式以来,它在数据库中进行过滤。

    【讨论】:

      【解决方案2】:

      Linq to SQL 在将查询发送到数据库之前将其转换为 SQL,因此仅返回过滤后的列表。

      【讨论】:

        【解决方案3】:

        执行查询时,它将创建 SQL 以仅返回过滤后的集合。

        需要注意的一点是,如果您对该查询的结果不做任何事情,则根本不会查询任何内容。

        查询将被推迟,直到您枚举结果集。

        【讨论】:

          【解决方案4】:

          这些人是对的,我的一个建议是监控 LinqToSql 正在创建的查询。 LinqToSql 是一个很棒的工具,但它并不完美。通过监控它创建的查询并在需要的地方进行一些调整,我注意到了一些效率低下的小问题。

          DataContext 有一个“Log”属性,您可以使用它来查看创建的查询。我创建了一个简单的 HttpModule,它将 DataContext 的日志(格式化为甜美)输出到我的输出窗口。这样我就可以看到它使用的 SQL 并在需要时进行调整。它物超所值。

          旁注 - 我并不是要否定 LinqToSql 创建的 SQL,因为它几乎每次都非常好和高效。监视查询的另一个好处是,您可以向您的朋友展示顽固的 ADO.NET - Stored Proc 人员 LinqToSql 的真正效率。

          【讨论】:

            猜你喜欢
            • 2020-07-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-02
            • 2017-08-07
            • 1970-01-01
            • 2012-12-02
            • 2023-03-21
            相关资源
            最近更新 更多