[Flags]Nhibernate ICriteria Enum-Flags (BitMask) Unterstützung
public enum ShowProductOn : short
{
HomePage = 1,
SalesPage = 2,
NewsLetter = 4
};
Gültige Werte für diese Enumeration:
1 - HomePage
2 - sales
3 - HomePage, Sales
4 - NewsLetter
5 - HomePage, NewsLetter
6 - sales, NewsLetter
7 - HomePage, Sales, NewsLetter
Ich mag ein Kriterium schreiben, die die Produkte alle auf der Homepage zurück. es in C# Um zu prüfen, ist sehr einfach:
if ((MY_PARAM & ShowProductOn.HomePage) == ShowProductOn.HomePage)
Console.WriteLine("Yes");
in Sql auch, es ist sehr einfach:
DECLARE @BitMask int = 3
IF ((@BitMask & 1) = 1)
BEGIN
Print('Yes')
END
Dies ist die NH-Kriterien, die ich alle Produkte auf der Homepage zurückzukehren schrieb (sollte 1 entsprechen | 3 | 5 | 7):
ICriteria Kriterien = NHibernateSession.CreateCriteria() .Add (Restrictions.Eq ("ShowProductOn", ShowProductOn.HomePage));
Diese Kriterien gibt nur Einträge mit "ShowProductOn" = 1, aber ignoriert die anderen abgestimmt Artikel mit "ShowProductOn" = 3 | 5 | 7.
Hat jemand die ICriteria/HQL-Syntax kennt Kriterien zu schreiben, die alle Einzelteile mit "ShowProductOn" zurück = 1 | 3 | 5 | 7?
Shay.