首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nhibernate Icriteria枚举标志(BitMask)支持

Nhibernate Icriteria枚举标志(BitMask)支持
EN

Stack Overflow用户
提问于 2009-07-11 23:25:55
回答 2查看 1.4K关注 0票数 3

标志

代码语言:javascript
复制
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)

代码语言:javascript
复制
Console.WriteLine("Yes");

在Sql中,这也非常简单:

DECLARE @BitMask int =3

如果((@BitMask & 1) = 1)

开始

代码语言:javascript
复制
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项的条件?

谢伊。

EN

回答 2

Stack Overflow用户

发布于 2010-07-12 19:05:30

票数 3
EN

Stack Overflow用户

发布于 2012-08-02 05:14:44

我解决了将标志枚举映射到字符串类型,然后使用Restrictions.Like查询值的问题:

属性定义:

代码语言:javascript
复制
public virtual DaysOfWeek Weekdays {
  get { return (DaysOfWeek)System.Enum.Parse(typeof(DaysOfWeek), _weekdays); }
  set { _weekdays = value.ToString(); }
}
private string _weekdays = "All";

特性映射(使用hbm.xml文件)

代码语言:javascript
复制
<property name="Weekdays" column="WEEKDAYS" access="field.camelcase-underscore" not-null="false" />

最后是条件查询:

代码语言:javascript
复制
Restrictions.Like("Weekdays", ConvertToDaysOfWeek(time.DayOfWeek).ToString(), MatchMode.Anywhere);

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1114910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档