OrmLite не генерирует правильное SQL для логических значений, допускающих значение NULL - PullRequest
0 голосов
/ 05 августа 2020

Моя модель имеет свойство bool (bool?), допускающее значение NULL. Мне нужно исключить строки, в которых столбец IsVoid имеет значение null или false. Я думал, что могу использовать оператор объединения null в качестве ярлыка, но это не дает правильного SQL для логических значений.

!(tlc.IsVoid ?? false)

Я создал образец решения для воспроизведения проблемы .

Возникает исключение:

System.Data.SqlClient.SqlException: 'An expression of non-boolean type specified in a context where a condition is expected, near ')'.
Invalid usage of the option NEXT in the FETCH statement.'

OrmLite сгенерировал это SQL:

SELECT "Id", "TransactionHeaderId", "SequenceNumber", "CardNumber", "IsVoid" 
FROM "POS"."TransactionLoyaltyCard"
WHERE (((("TransactionHeaderId" = @0) AND ("CardNumber" = @1)) AND (1=1)) AND NOT (COALESCE("IsVoid",@2)))
ORDER BY "SequenceNumber" OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY

Но это недопустимо и должно быть (обратите внимание на = 0 после объединения):

SELECT "Id", "TransactionHeaderId", "SequenceNumber", "CardNumber", "IsVoid" 
FROM "POS"."TransactionLoyaltyCard"
WHERE (((("TransactionHeaderId" = @0) AND ("CardNumber" = @1)) AND (1=1)) AND NOT (COALESCE("IsVoid",@2)) = 0)
ORDER BY "SequenceNumber" OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY

Я могу обойти проблему, явно проверив, имеет ли свойство значение null, но было бы здорово, если бы это сработало.

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