2009-08-05 2 views

Répondre

24

Si Nombre était une chaîne, il serait facile:

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

Puisque vous avez un certain nombre, NHibernate va vérifier le type de numéro et si vous lui donnez une chaîne, il lancera une exception.

Je ne sais pas pourquoi l'équipe NH n'a pas fourni une surcharge avec l'objet en tant que paramètre et un paramètre de MatchMode ....

, vous pouvez le faire encore Quoiqu'il en soit comme ceci:

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

Modifier

A propos de l'alias:

(je ne peux pas trouver où les pourparlers de documentation à ce sujet, mais voici m y compris)

{alias} retourne l'alias utilisé à l'intérieur par NH pour la plus récente CreateCriteria. Donc, si vous aviez:

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

{alias} dans ce cas serait « doc » - de sorte que vous finiriez avec: N ° document. Donc, utilisez toujours {alias} après les CreateCriteria dont vous avez besoin d'utiliser l'alias.

+0

excellent, merci. pour l'alias sur l'expression sql ... j'ai utilisé "this_.Number" est-ce correct, suis-je sûr que NHibernate utilisera toujours this_.? –

+0

parce que j'ai fait alias mes critères avec "wi" - session.CreateCriteria ("wi") - mais je ne peux pas utiliser "wi.Number" dans l'expression sql car il le met dans le T-SQL littéralement (si cela logique). –

+0

et sens "wi" dans les appels de création de critères réguliers effectivement converti en "this_" dans le T-SQL envoyé au serveur je suis allé de l'avant et mettre l'alias dans l'expression sql "this_.Number" –

Questions connexes