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