Я использую NH2.1 с конфигурацией FluentNH и Linq2NH в базовой модели репозитория. Я пытаюсь настроить запрос, который будет переваривать различные поля формы из winform. Критерии в значительной степени ряд текстовых полей, каждый из которых имеет флажок с указанием того, содержат ли критерии подстановочных знаков (только звездочки поддерживаются), поэтому логика серии:Комплексные критерии для запроса NHibernate: Linq или ICriteria?
...
&& Field1.IsNullOrBlank() || Field1 == Criteria1 || (Criteria1IsWildCard && Regex.Match(Field1, Criteria1.Replace("*",".*")))
&& Field2.IsNullOrBlank() || Field2 == Criteria2 || (Criteria2IsWildCard && Regex.Match(Field2, Criteria2.Replace("*",".*")))
Теперь, это было бы просто замечательно для Linq2Objects, однако он не будет очень далеко в запросе Linq2NH по нескольким причинам (собственные методы расширения, проверка регулярных выражений и т. Д.).
Я создал другую страницу поиска, которая должна переваривать похожие данные, однако этот запрос выполняется против другого источника данных Репозитория, который требует запроса в виде строки (SalesForce SOQL). Поскольку у NHibernate есть так много более сложных, доступных для компилятора инструментов, я бы предпочел, чтобы HQL был моим последним вариантом.
Другая важная информация:
- Извлечение и кэширование содержимого всей таблицы для того, чтобы отфильтровать результаты Linq2Objects едва выполнимо (таблица около 15к записей), но любой вариант, который не должен сделать это очень предпочтительным.
- Пользователь должен иметь столько подстановочных знаков, сколько необходимо; поэтому нецелесообразно использовать метод обхода StartsWith()/EndsWith()/Contains().
Итак, вопрос в том, как бы вы установили это для выполнения против NHibernate?
Не как звездочки, но MSS поддерживает LIKE-сравнения с использованием групповых символов%, а модель NH ICriteria поддерживает это напрямую, в то время как Linq2NH поддерживает преобразование StartsWith, EndsWith и Содержит в LIKE операции с% в начале, в конце или с обеих сторон, как применимо , – KeithS
Но я имел в виду «звездочки» –