2011-03-29 5 views
5

J'ai ce code exemple ...Nhibernate Queryover cas Insensible Isin

Result = session.QueryOver<Lfee_Exc>().WhereRestrictionOn(x => x.FirstName) 
.IsIn(ListOfFirstNames).List(); 

Est-il possible de faire ce cas ou cas insenstive supérieure x.ArNumber pour mon cas serveur sensible Oracle?

+0

ne pense pas qu'il est possible Isin que l'opération est disponible en ICriteria. (L'implémentation sous-jacente de QueryOvers est résolue en critères.) Il existe cependant un opérateur de restriction IsInsensitiveLike lambda. – WorldIsRound

Répondre

9

Convertir ListOfFirstNames à upercase puis:

session.QueryOver<Lfee_Exc>() 
    .Where(Restrictions.In(Projections.SqlFunction(
           "upper", NHibernateUtil.String, 
           Projections.Property<Lfee_Exc>(x => x.FirstName)), 
          ListOfFirstNames)) 
+0

Merci. Y a-t-il une liste des sqlfunctions intégrées? Impossible de trouver une liste exhaustive sur google. – gt124

+2

@ gt124: Ils varient en fonction du dialecte, les standards sont en https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs, recherchez ceux spécifiques https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Dialect (gardez à l'esprit la chaîne de l'héritage: MsSql2008 hérite de MsSql2005, etc) –

+0

Ok merci, allez jeter un oeil. – gt124