NHibernate - maneira mais fácil de fazer uma pesquisa COMO contra uma coluna inteira com critérios API?

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

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando fazer uma como a busca contra uma coluna inteira, o que eu preciso fazer é realmente converter a coluna para um varchar e, em seguida, fazer o mesmo pesquisa. Isso é possível? qual é a maneira mais fácil de fazer isso usando a API Criteria?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
Foi útil?

Solução

Se Número fosse uma corda, então seria fácil:

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

Uma vez que você tem um número, NHibernate irá verificar o tipo de número e se você dar-lhe uma corda que vai lançar uma exceção.

Não sei por que a equipe NH não forneceu uma sobrecarga com objeto como parâmetro e parâmetros MatchMode ....

De qualquer forma, você ainda pode fazê-lo como este:

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

Editar

Sobre o alias:

(i não pode encontrar onde as conversações de documentação sobre isso, mas aqui é a minha compreensão dele)

{apelido} retorna o alias usado interior de NH para os CreateCriteria mais recentes. Então, se você teve:

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

{apelido} neste caso seria 'doc' - assim você iria acabar com:. Doc.Number

Então, sempre use {apelido} após o CreateCriteria cujo apelido que você precisa para uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top