[Флаги]Nhibernate Icriteria Enum флаги (битовая маска) поддержка
public enum ShowProductOn : short
{
HomePage = 1,
SalesPage = 2,
NewsLetter = 4
};
Допустимые значения для этого перечисления:
1 - HomePage
2 - SalesPage
3 - HomePage, SalesPage
4 - NewsLetter
5 - HomePage, NewsLetter
6 - SalesPage, NewsLetter
7 - HomePage, SalesPage, NewsLetter
Я хотел бы написать критерии, который возвращает все продукты на главной странице. Чтобы проверить это в C# очень просто:
если ((MY_PARAM & ShowProductOn.HomePage) == ShowProductOn.HomePage)
Console.WriteLine("Yes");
в Sql это также очень просто:
DECLARE @BitMask INT = 3
ЕСЛИ ((@BitMask & 1) = 1)
НАЧАТЬ
Print('Yes')
END
Это Критерии NH, что я написал, чтобы вернуть все продукты на главной странице (должно соответствовать 1 | 3 | 5 | 7):
критерии ICriteria = NHibernateSession.CreateCriteria() .Add (Restrictions.Eq («ShowProductOn», ShowProductOn.HomePage));
Этот критерий возвращает только элементы с «ShowProductOn» = 1, но игнорирует другие согласованные элементы с помощью «ShowProductOn» = 3 | 5 | 7.
Кто-нибудь знает синтаксис ICriteria/HQL, чтобы написать критерии, которые возвратят все элементы с помощью «ShowProductOn» = 1 | 3 | 5 | 7?
Shay.