【问题标题】:Why is linq query not putting "where" in SQL statement为什么 linq 查询不在 SQL 语句中放置“where”
【发布时间】:2015-03-03 17:21:16
【问题描述】:

这是我的 linq 查询:

 Dim Jobs As New DBDataContext
  Dim jobpart = Jobs.JobParts.Where(Function(x) x.JobNum = 143401).ToList

这是我在 sql profiler 中看到的 sql 语句:

SELECT [t0].[JobNum], [t0].[PartNum], [t0].[UserName] FROM [dbo].[JobParts] AS [t0]

为什么 where 语句没有通过?它正在从数据库中选择所有记录,并且似乎正在过滤掉我以后想要的记录。

更新:

我创建了一个新网站,其中只有该数据类和相同的代码,并且“位置”显示在分析器中。我尝试将该数据类添加到我当前的网站,并且“位置”没有出现在分析器中。什么可能会改变 Linq 在项目之间创建查询的方式?

【问题讨论】:

  • 这不是 linq “优化”的方式——不在数据库上运行昂贵的过滤器,而是认为客户端上的循环更好?
  • 能否包含定义 Jobs 和 JobParts 的代码?这可能就是问题所在。
  • 通过调用.ToList(),您是说超出查询点的所有内容都将在本地执行,但我希望在数据库中执行之前的所有内容。您确定这是整个查询吗?
  • @JeroenVannevel 是的,就是这样。我确实删除了几十个字段以使其可读。
  • @ConstantCoder 我提出了 Jobs 的定义,但是我将如何在我的 dbml 设计器中显示 JobParts 的定义?

标签: .net sql-server linq linq-to-sql


【解决方案1】:

我终于明白了。在命名空间标记下的 Web 配置中,我使用了 <clear/>,它消除了 linq 查询所需的一些命名空间。很难找到的原因是因为我在我的 vb 页面中手动导入了 system.linq.enumerable,这掩盖了我的“where”语句中的任何错误。注释掉该导入后,我开始看到我的类不可查询并且我可能缺少命名空间的错误。那是我发现网络配置问题的时候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多