Asp.net LINQ到SQL查询不返回任何结果
我有一个使用LINQ到SQL的查询。它查询底层数据库表。它使用Where条件来缩小结果范围,即:Asp.net LINQ到SQL查询不返回任何结果,asp.net,vb.net,linq,linq-to-sql,Asp.net,Vb.net,Linq,Linq To Sql,我有一个使用LINQ到SQL的查询。它查询底层数据库表。它使用Where条件来缩小结果范围,即: 性别 当前入住率
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的语句中,因为这是一个小字段,所以没有意义。你真的在dbHalls.Rooms.sh中将他们的性别记录为“女性”和“男性”吗?我看不出你的LINQ有任何明显的问题,所以,试着删除Where子句,然后一次一个地把它们带回来。这应该让你知道是什么导致了这个问题,尽管我同意安德鲁·沃格尔(Andrew Vogel)的观点,即性别条款很可能是个嫌疑犯
如果查询在所有Where子句消失后返回为空,那么您将知道这里还发生了其他事情。我认为找出问题的最佳方法是生成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语句,它将比我们在不查看底层数据库的情况下提供的任何语句都更具信息性
唯一让我感到潜在问题的是会话(“性别”)
。您基本上依赖于要填充的会话对象,因此大小写敏感字符串键“gender”
的值与数据库中的大小写敏感字符串字段gender
相匹配。这听起来像是相当多的假设,可能需要测试,也可能不需要测试,这可能是接收空结果的原因
编辑
我刚看到你的更新。Linq到sql,将位字段解释为布尔值,而不是整数值。尝试将其更改为仅
where sh.u可用
是否在此处放置断点,运行应用程序,将鼠标悬停在selectedHalls上
并查看生成的SQL代码?尝试将它复制到SSMS,看看为什么它不会产生任何结果…嗯…我只是尝试了一下,但是当我看到SQL查询时,我没有看到它。上面写着“selectedHalls | Database Query”,并进行了扩展,但我不确定在哪里可以找到SQL?更正了。没什么区别,太棒了。谢谢你的帮助!