2010-09-20 1 views
0

J'ai une entité, avec un champ de type enum, qui est conservé en entier dans ma base de données.Restriction d'une requête NHibernate en utilisant ICriteria selon une énumération d'énumérations

Lorsque je récupère des objets de la base de données en utilisant ICriteria, je souhaite limiter les résultats à ceux dont le champ est membre d'une collection de valeurs enum. Restrictions.In travailler avec une collection d'enums?

Ce qui suit ne fonctionne pas. Dois-je effectuer quelque chose comme le cast de type dans la partie "restrictions.in" de la requête?

var myEnumCollection = new MyEnum[] { MyEnum.One }; 
return FindAll<MyType>(Restrictions.In("EnumProperty", myEnumCollection)); 

FindAll est une méthode d'encapsulation

criteria.GetExecutableCriteria(Session).List<MyType>() 
+0

Quelques éléments peuvent vous aider à obtenir une réponse ici ... 1) Publiez le mappage pour votre propriété enum, 2) Publiez le sql résultant qui est généré par cette requête critiera. – DanP

+0

J'ai le même problème que le vôtre (j'ai converti mon enum en int et je reçois toujours une erreur qui dit "Impossible d'utiliser des collections avec InExpression" .Cela a été une très vieille question, je me demande si vous avez trouvé une solution ? Merci – Beatles1692

Répondre

0

Mon estimation initiale serait que vous aurez besoin de comparer contre les valeurs entières des membres enum (en supposant que vous la cartographie de la ENUM en tant entier); donc quelque chose comme:

var myEnumCollection = new int[] { MyEnum.One }; 
return FindAll<MyType>(Restrictions.In("EnumProperty", myEnumCollection)); 

Peut être la solution que vous cherchez. Si vous mettez à jour votre message avec plus de détails (mappage du membre enum et du sql généré par la requête), je pourrais peut-être vous fournir une aide supplémentaire.

Questions connexes