Моя модель имеет свойство 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, но было бы здорово, если бы это сработало.