标志
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#中检查它非常简单:
if ((MY_PARAM & ShowProductOn.HomePage) == ShowProductOn.HomePage)
Console.WriteLine("Yes");在Sql中,这也非常简单:
DECLARE @BitMask int =3
如果((@BitMask & 1) = 1)
开始
Print('Yes')结束
这是我为在主页上返回所有产品而编写的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项的条件?
谢伊。
发布于 2010-07-12 19:05:30
发布于 2012-08-02 05:14:44
我解决了将标志枚举映射到字符串类型,然后使用Restrictions.Like查询值的问题:
属性定义:
public virtual DaysOfWeek Weekdays {
get { return (DaysOfWeek)System.Enum.Parse(typeof(DaysOfWeek), _weekdays); }
set { _weekdays = value.ToString(); }
}
private string _weekdays = "All";特性映射(使用hbm.xml文件)
<property name="Weekdays" column="WEEKDAYS" access="field.camelcase-underscore" not-null="false" />最后是条件查询:
Restrictions.Like("Weekdays", ConvertToDaysOfWeek(time.DayOfWeek).ToString(), MatchMode.Anywhere);希望这能有所帮助。
https://stackoverflow.com/questions/1114910
复制相似问题