[Flags]Nhibernate Icriteria drapeaux ENUM (bitmask) de support
public enum ShowProductOn : short
{
HomePage = 1,
SalesPage = 2,
NewsLetter = 4
};
valeurs valides pour cette énumération:
1 - page
2 - salespage
3 - page de garde, salespage
4 - NewsLetter
5 - HomePage, NewsLetter
6 - salespage, NewsLetter
7 - HomePage, salespage, NewsLetter
Je voudrais écrire un critère qui renvoie tous les produits sur la page d'accueil. Pour le vérifier en C# est très simple:
if ((MY_PARAM & ShowProductOn.HomePage) == ShowProductOn.HomePage)
Console.WriteLine("Yes");
dans Sql il est aussi très simple:
DECLARE @BitMask int = 3
IF ((@BitMask & 1) = 1)
BEGIN
Print('Yes')
FIN
Voici les critères NH que j'ai écrit à retourner tous les produits sur la page d'accueil (doit correspondre à 1 | 3 | 5 | 7):
critères ICriteria = NHibernateSession.CreateCriteria() .Add (Restrictions.Eq ("ShowProductOn", ShowProductOn.HomePage));
Ce critère renvoie uniquement les éléments avec "ShowProductOn" = 1 mais ignore les autres éléments correspondants avec "ShowProductOn" = 3 | 5 | 7.
Quelqu'un connaît-il la syntaxe ICriteria/HQL pour écrire un critère qui retournera tous les éléments avec "ShowProductOn" = 1 | 3 | 5 | 7?
Shay.