Насколько я знаю, когда я использую Linq, NHibernate поддерживает некоторые операторы и преобразует их в соответствующий SQL. Например, когда я создаю запрос, подобный этому
q => q.Where(foo => foo.Eligibility > 0)
.OrderBy(foo => foo.Eligibility);
Теоретически он будет правильно выполнять поиск и порядок в SQL.
Теперь, если я пытаюсь запросить это:
q => q.Where(foo => foo.Eligibility > 0)
.Except(blacklistedFoos)
.OrderBy(foo => foo.Eligibility);
Это дает мне ошибку (v2.0.50727 мы используем в производстве), потому что оператор кроме не поддерживается.
Теперь, если я создам HashSet blacklistedFooSet
, чтобы справиться с этим,
q => q.Where(foo => foo.Eligibility > 0)
.Where(foo=> !blacklistedFooSet.Contains(foo))
.OrderBy(foo => foo.Eligibility);
Что будет? Будет ли NHibernate правильно переводить первое где и порядок, а затем вручную выполнять другое где за пределами базы данных? Каково общее правило для неподдерживаемых операторов / предложений?