c# – 如何在NHibernate中查询存储为枚举的标志
发布时间:2020-12-15 19:43:08 所属栏目:百科 来源:网络整理
导读:如何进行HQL或Criteria搜索(后者是首选)涉及用作标志的枚举.换句话说,我有一个持久的枚举属性,存储某种标志.我想查询所有设置了这些标志之一的记录.使用Eq当然不会起作用,因为只有那是唯一的标志才会成立. 使用Criteria API解决这个问题是最好的,但如果只使
如何进行HQL或Criteria搜索(后者是首选)涉及用作标志的枚举.换句话说,我有一个持久的枚举属性,存储某种标志.我想查询所有设置了这些标志之一的记录.使用Eq当然不会起作用,因为只有那是唯一的标志才会成立.
使用Criteria API解决这个问题是最好的,但如果只使用HQL这样做也很好. 解决方法
以下是使用条件API执行此操作的方法:
[Flags] enum Bar{ A = 0x01,B = 0x02,C = 0x04 } var criteria = this.Session.CreateCriteria<Foo>() .Add( BitwiseFlags.IsSet( "Bar",Bar.A | Bar.C ) ); 使用: public class BitwiseFlags : LogicalExpression { private BitwiseFlags( string propertyName,object value,string op ) : base( new SimpleExpression( propertyName,value,op ),Expression.Sql( "?",NHibernateUtil.Enum( value.GetType() ) ) ) { } protected override string Op { get { return "="; } } public static BitwiseFlags IsSet(string propertyName,Enum flags) { return new BitwiseFlags( propertyName,flags," & " ); } } 应该生成以下输出where子句: FROM _TABLE WHERE (this_.Bar & 5 = 5) 这应该给你带有标志Bar.A和Bar.C设置的行(不包括其他所有内容).你应该能够将它与连接和分离一起使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |