我有一个使用LINQ-to-SQL的查询。它查询底层数据库表Rooms。它使用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的语句,这没有意义,因为这是一个位字段。
答案 0 :(得分:4)
我没有看到您的LINQ有任何明显错误,因此请尝试删除Where子句并一次一个地删除它们。这应该让你知道是什么导致了这个问题,虽然我同意 Andrew Vogel ,性别条款很可能是个嫌疑人。
如果在所有Where子句消失后查询返回空,那么您将知道此处还有其他内容。
答案 1 :(得分:4)
我认为最好的方法是找出生成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 :(得分:2)
你真的在dbHalls.Rooms.sh中将他们的性别记录为“女性”和“男性”吗?