2009-08-05 5 views

risposta

24

Se Numero fosse una stringa, allora sarebbe facile:

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

Dal momento che si dispone di un numero, NHibernate controllerà il tipo di numero e se si dà una stringa si getterà un eccezione.

Non

sicuro perché la squadra NH non ha fornito un sovraccarico con oggetto come parametro e un parametri MatchMode ....

In ogni caso, si può ancora fare in questo modo:

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

Modifica

circa l'alias:

(non riesco a trovare dove i colloqui documentazione su questo ma qui è m comprensione di esso)

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

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' - così si finirebbe con: slezionare.

Quindi, utilizzare sempre {alias} dopo CreateCriteria il cui alias è necessario utilizzare.

+0

eccellente, grazie. per l'alias dell'espressione sql ... ho usato "this_.Number" è ok, sono sicuro che NHibernate userà sempre this_.? –

+0

perché ho fatto alias i miei criteri con "wi" - session.CreateCriteria ("wi") - ma non posso usare "wi.Number" nell'espressione sql perché lo inserisce letteralmente nel T-SQL (se quello ha senso). –

+0

e rileva "wi" all'interno delle normali chiamate di creazione dei criteri effettivamente convertite in "questo_" nel T-SQL inviato al server ho proseguito e ho inserito l'alias nell'espressione sql in "this_.Number" –

Problemi correlati