Я не знаю, почему этот запрос LINQ генерирует оператор case, это действительно странно ...
Но мне лично не нравится подход с логическим значением.
Логическое значение имеет 2 значения: true или false. В тот момент, когда вы делаете его обнуляемым, вы назначаете ему 3-е возможное значение.
В таком сценарии я думаю, что лучше использовать Enum.
Я предполагаю, что «Секс» предназначен для «Мужской» / «Женский», и в этом случае я думаю, что лучший подход к проблеме - это перечисление типа:
public enum SexEnum
{
Unspecified = 0,
Male = 1,
Female = 2
}
Это делает ваш код гораздо более наглядным:
var males = session.Query<Person>().Where(x => x.Sex == SexEnum.Male);