NHibernate - maneira mais fácil de fazer uma pesquisa COMO contra uma coluna inteira com critérios API?
-
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 + "%"))
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.