NHibernate: ¿la forma más fácil de hacer una búsqueda ME GUSTA en una columna entera con Criteria API?

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

  •  22-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de hacer una búsqueda similar en una columna entera, lo que necesito hacer es convertir la columna en un varchar y luego hacer la búsqueda similar. es posible? ¿Cuál es la forma más fácil de hacer esto utilizando la API Criteria?

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

Solución

Si Number fuera una cadena, entonces sería fácil:

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

Como tienes un número, NHibernate verificará el tipo de Número y si le das una cadena, arrojará una excepción.

No estoy seguro de por qué el equipo de NH no proporcionó una sobrecarga con el objeto como parámetro y los parámetros MatchMode ...

De todos modos, todavía puedes hacerlo así:

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

Editar

Sobre el alias:

(no puedo encontrar dónde la documentación habla de esto, pero aquí lo entiendo)

{alias} devuelve el alias utilizado por NH para el CreateCriteria más reciente. Entonces si tuvieras:

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

{alias} en este caso sería 'doc', por lo que terminaría con: doc.Number.

Entonces, use siempre {alias} después de CreateCriteria cuyo alias necesita usar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top