フラグを含む数値列を持つテーブルにクエリを実行したいと考えています。
SQL Server 2008 データベースに対して NHibernate XML を使用してマッピングを作成しました (興味深い部分のみを示します)。
これは私の列挙型です:
[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; }
}
ここに私のクラスdbマッピング:
<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
ですか?
私はこれらの解決策を試しました:
直接クエリを実行することを考えていますが、私のクエリは非常に複雑で、 API
createSqlQuery
を活用したいと考えています。QueryOver
Linq to Nhibernate でプロジェクトを開始しましたが、多くのバグが見つかり、クエリが完全にサポートされていないことに気付きました...
フラグ列をクエリする独自の拡張メソッドを作成しますが、SQL クエリでコード ラムダ関数
QueryOver
を API 変換する方法 (および適切な方言を適用する方法) を理解していなかったため、私には時期尚早です。QueryOver
最善の方法を見つけるのを手伝ってください...