2010-09-20 117 views
0

我有一个实体,它有一个enum类型的字段,它在我的数据库中作为整数持久化。根据枚举的枚举限制使用ICriteria的NHibernate查询

当使用ICriteria从数据库中检索对象时,我希望将结果限制为那些字段是枚举值集合成员的结果。是否限制?与一系列枚举一起工作?

以下不起作用。我是否必须在查询的“restrictions.in”部分执行类似于类型转换的操作?

var myEnumCollection = new MyEnum[] { MyEnum.One }; 
return FindAll<MyType>(Restrictions.In("EnumProperty", myEnumCollection)); 

的FindAll是封装

criteria.GetExecutableCriteria(Session).List<MyType>() 
+0

有几件事可能会帮助你在这里得到答案...... 1)发布你的枚举属性的映射,2)发布由这个critiera查询生成的结果sql。 – DanP 2010-09-20 11:15:45

+0

我遇到了和你一样的问题(我已将enum转换为int,但仍出现错误,提示“无法在InExpression中使用集合”。由于这是一个非常古老的问题,因此我想知道您是否找到了解决方案? 谢谢 – Beatles1692 2015-02-07 14:54:24

回答

0

我最初的猜测是,你会需要比较反对枚举成员的整数值(假设你正在映射的枚举作为一个方法整数);因此类似于:

var myEnumCollection = new int[] { MyEnum.One }; 
return FindAll<MyType>(Restrictions.In("EnumProperty", myEnumCollection)); 

可能是您要解决的问题。如果你更新你的文章更多的细节(映射的enum成员和由查询生成的sql),我可能能够提供进一步的帮助。