我想查询一个包含标志的数字列的表。
我已经使用 NHibernate XML 针对 SQL Server 2008 数据库构建了一个映射(我只向您展示了有趣的部分):
这是我的枚举:
[Flags]
public enum DocsFlag
{
FLAG_TOREAD = 0,
FLAG_READ = 2,
FLAG_MANAGED = 4,
FLAG_INUSE = 8,
FLAG_FORWARDED = 16,
FLAG_RESUBMITTED = 32,
FLAG_PRINTED = 64,
}
这是我的课:
public class MyObject
{
...
public virtual DocsFlag Flags { get; set; }
}
这是我的类数据库映射:
<class name="MyObject">
...
<property name="Flags" not-null="true"/>
</class>
我想用强类型查询QUERYOVER
:
_session.QueryOver<MyObject>()
.Where(x => x.Error != null & (x.Flags && (DocsFlag.FLAG_READ | DocsFlag.FLAG_MANAGED | DocsFlags.FLAG_PRINTED)> 0))
.Left.JoinQueryOver<DestinationObj>(m => m.Destination)
.Left.JoinQueryOver<UsersObj>(x => x.LinkedUser).ToList();
或者简单地说:
.Where (x=> x.Flags && (DocsFlag.FLAG_READ | DocsFlag.FLAG_MANAGED | DocsFlags.FLAG_PRINTED)> 0)
但它不起作用....
使用 nhibernate 查询位标志的最佳方法是什么QueryOver
?
我尝试了这些解决方案:
我想直接查询,
createSqlQuery
但我的查询非常复杂,我想利用QueryOver
API。我已经从 Linq to Nhibernate 开始了我的项目,但是我发现了很多错误,并且我注意到没有完全支持查询...
编写我自己的
QueryOver
扩展方法来查询标志列,但对我来说还为时过早,因为我不明白如何QueryOver
在 SQL 查询中转换代码 lambda 函数(并应用适当的方言)。
帮我找到最好的方法...