【问题标题】:LINQ-to-SQL Query Returning No ResultsLINQ-to-SQL 查询不返回任何结果
【发布时间】:2011-03-05 16:14:25
【问题描述】:

我有一个使用 LINQ-to-SQL 的查询。它查询底层数据库表 Rooms。它使用Where条件来缩小结果范围,即:

  1. 性别。
  2. 当前入住率
  3. 检查了可用标志

我知道这应该返回结果,但它一直返回一个空集。有任何想法吗?代码如下

    Dim selectedHalls = (From sh In dbHalls.Rooms _
                         Where sh.gender = Session("gender").ToString _
                         Where sh.max_occupancy > sh.current_occupancy _
                         Where sh.is_available = 1 _
                         Select sh.building_name).Distinct()

更新:我已经验证问题出在 sh.is_available = 1 的语句上,因为这是一个位字段,所以没有意义。

【问题讨论】:

  • 您是否在此处设置断点,运行应用程序,将鼠标悬停在selectedHalls 上并查看生成的 SQL 代码?尝试将其复制到 SSMS 中,看看为什么它不会产生任何结果...
  • 嗯...我刚刚尝试过,但是当我停止时,我没有看到 SQL 查询。它说“selectedHalls|Database Query”并且它会扩展 - 但我不确定在哪里可以找到 SQL?

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


【解决方案1】:

我认为找出问题所在的最佳方法是生成 SQL 字符串并通过直接针对数据源执行它来测试您“它应该返回结果”的假设。

为此:

      Dim sqlQuery As String =  dbHalls.GetCommand(
                    (From sh In dbHalls.Rooms _
                     Where sh.gender = Session("gender").ToString _
                     Where sh.max_occupancy > sh.current_occupancy _
                     Where sh.is_available = 1 _
                     Select sh.building_name).Distinct()
              ).CommandText

(我通常使用 C#,但我认为这就是您在 VB 中声明字符串的方式,对吧?)

无论如何,这将为您提供一个 SQL 语句,该语句比我们在无法查看您的底层数据库的情况下提供的任何内容都提供更多信息。

唯一让我觉得可能有问题的是Session("gender")。您基本上依赖于要填充的 Session 对象,具有与数据库中区分大小写的字符串字段 gender 匹配的区分大小写字符串键 "gender" 的值。这听起来像是很多假设,可能会或可能不会经过测试,并且可能是收到空结果的原因。

编辑 我刚看到你的更新。 Linq-to-sql,将位字段解释为布尔值,而不是整数值。尝试将其更改为 where sh.is_available

【讨论】:

  • 太棒了。感谢您的帮助!
【解决方案2】:

我看不出您的 LINQ 有任何明显错误,因此请尝试删除 Where 子句并一次将它们恢复。这应该让您知道导致问题的原因,尽管我同意 Andrew Vogel 的观点,即性别条款可能是一个嫌疑人。

如果在所有 Where 子句消失后查询返回为空,那么您就会知道这里还有其他事情发生。

【讨论】:

    【解决方案3】:

    您真的在 dbHalls.Rooms.sh 中将他们的性别记录为“女性”和“男性”吗?

    【讨论】:

    • 已更正。没有什么不同。
    猜你喜欢
    • 2021-06-02
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2016-09-30
    相关资源
    最近更新 更多