NHibernate: il modo più semplice per eseguire una ricerca LIKE su una colonna intera con API Criteria?

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

  •  22-07-2019
  •  | 
  •  

Domanda

Sto provando a fare una ricerca simile contro una colonna intera, quello che devo fare è in realtà lanciare la colonna su un varchar e quindi fare la ricerca simile. È possibile? qual è il modo più semplice per farlo utilizzando l'API Criteria?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
È stato utile?

Soluzione

Se Numero fosse una stringa, sarebbe facile:

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

Dato che hai un numero, NHibernate controllerà il tipo di numero e se gli dai una stringa genererà un'eccezione.

Non so perché il team NH non abbia fornito un sovraccarico con oggetto come parametro e parametri MatchMode ....

Ad ogni modo, puoi ancora farlo in questo modo:

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

Modifica

Informazioni sull'alias:

(non riesco a trovare dove la documentazione parla di questo, ma ecco la mia comprensione di esso)

{alias} restituisce l'alias utilizzato all'interno da NH per il più recente CreateCriteria. Quindi se avessi:

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

{alias} in questo caso sarebbe 'doc' - quindi finiresti con: doc.Number.

Quindi, usa sempre {alias} dopo CreateCriteria di cui devi usare l'alias.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top