3

フラグを含む数値列を持つテーブルにクエリを実行したいと考えています。

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ですか?

私はこれらの解決策を試しました:

  1. 直接クエリを実行することを考えていますが、私のクエリは非常に複雑で、 APIcreateSqlQueryを活用したいと考えています。QueryOver

  2. Linq to Nhibernate でプロジェクトを開始しましたが、多くのバグが見つかり、クエリが完全にサポートされていないことに気付きました...

  3. フラグ列をクエリする独自の拡張メソッドを作成しますが、SQL クエリでコード ラムダ関数QueryOverを API 変換する方法 (および適切な方言を適用する方法) を理解していなかったため、私には時期尚早です。QueryOver

最善の方法を見つけるのを手伝ってください...

4

2 に答える 2