Запрос LINQ-to-SQL, не возвращающий результатов - PullRequest
2 голосов
/ 05 марта 2011

У меня есть запрос с использованием LINQ-to-SQL.Он запрашивает базовую таблицу базы данных Rooms.Он использует условия условия, чтобы сузить результаты, а именно:

  1. Пол.
  2. Текущая занятость <Макс. Занятость </li>
  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, что не имеет смысла, так как это битовое поле.

Ответы [ 3 ]

4 голосов
/ 05 марта 2011

Я не вижу ничего явно неправильного в вашем LINQ, поэтому попробуйте убрать предложения Where и вернуть их по одному.Это должно сообщить вам, что является причиной проблемы, хотя я согласен с Эндрю Фогелем в том, что гендерное предложение является вероятным подозреваемым.

Если запрос возвращается пустым после того, как все предложения Where пропалитогда вы узнаете, что здесь происходит что-то еще.

4 голосов
/ 05 марта 2011

Я думаю, что лучший способ выяснить, в чем заключается проблема, это сгенерировать строку 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 с учетом регистра в вашей базе данных. Это звучит как довольно много предположений, которые могут или не могут быть проверены и могут быть причиной для получения пустых результатов.

EDIT Я только что видел ваше обновление. Linq-to-sql интерпретирует битовое поле как логическое значение, а не целочисленное значение. Попробуйте изменить его на where sh.is_available

2 голосов
/ 05 марта 2011

Вы действительно записываете их полы как "Женский" и "Мужской" в dbHalls.Rooms.sh?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...