NHibernate – самый простой способ выполнить поиск LIKE по целочисленному столбцу с помощью Criteria API?

StackOverflow https://stackoverflow.com/questions/1231054

  •  22-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь выполнить аналогичный поиск по целочисленному столбцу, мне нужно фактически привести столбец к varchar, а затем выполнить аналогичный поиск.Это возможно?какой самый простой способ сделать это с помощью Criteria API?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
Это было полезно?

Решение

Если бы Number был строкой, это было бы легко:

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

Поскольку у вас есть число, NHibernate проверит тип номера, и если вы укажете ему строку, он выдаст исключение.

Не знаю, почему команда NH не предоставила перегрузку с объектом в качестве параметра и параметрами MatchMode....

В любом случае, вы все равно можете сделать это вот так:

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

Редактировать

О псевдониме:

(я не могу найти, где об этом говорится в документации, но вот мое понимание этого)

{alias} возвращает псевдоним, использованный внутри NH для самого последнего CreateCriteria.Итак, если у вас было:

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();

{alias} в этом случае будет «doc», поэтому в итоге вы получите:номер документа.

Поэтому всегда используйте {alias} после CreateCriteria, псевдоним которого вам нужно использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top