У меня есть класс Person
, который имеет свойство Sex
.Как использовать, если условие для nullable boolean в linq для NHibernate
public class Person
{
public bool? Sex {get; set;}
}
И у меня есть запрос linq к NHibernate.
var q = SessionInstance.Query<Person>();
if (dto.Sex != null)
q = q.Where(p => p.Sex == dto.Sex);
return q.ToList();
Теперь, если значение равно dto.Sex true
, правильный результат.
Но если значение dto.Sex равно false
, результат не верный, потому что в результате есть люди, которые Sex являются ложными или нулевыми.
Я проверил профилировщика для этого запроса:
select * from Person_Person person0_
where case
when person0_.Sex = 1 then 1
else 0
end = case
when 0 /* @p0 */ = 1 then 1
else 0
end
Почему?
Я проверил этот пример, потому что я не осознавал этого проблема, и я могу сказать, что он действительно существует hym некоторое обходное решение: .Where (x => x.IsActive.HasValue && x.IsActive == false) –
@Adam: Я так понимаю, но я ищу для лучшего решения – Ehsan
You написал в комментарии «Моя базовая проблема в типе сгенерированного запроса», можете ли вы подробнее остановиться на этом вопросе. Как я вижу, описанная проблема существует только с типом bool. –