1

Windows では、次のようなコードがあります。

var active_ids = QueryOver.Of<Members>()
.Where(m => m.HasAccess);

この行の後でデバッガーを中断して
?active_ids.criteriaと入力すると、次のように表示されることがわかりました。

{IsApproved = True}

var namematch = Restrictions.Disjunction();
namematch.Add(Restrictions.Where<Members>(m => m.FirstName.IsInsensitiveLike(name.AsStartsWith())));
namematch.Add(Restrictions.Where<Members>(m => m.LastName.IsInsensitiveLike(name.AsStartsWith())));
namematch.Add(Restrictions.Where<Members>(m => m.LastName.IsInsensitiveLike(("-" + name).AsContains())));

この行の後でデバッガーを中断して
?namematch.criteriaと入力すると、次のように表示されることがわかりました。

Count = 3
    [0]: {FirstName ilike bak%}
    [1]: {LastName ilike bak%}
    [2]: {LastName ilike %-bak%}

ただし、次のような非常に複雑なクエリがある場合:

var matchQuery = session.QueryOver<Member_Graph>()
.WithSubquery.WhereProperty(vg => vg.MemberId).In(memberlist)
.Where(approved_members)
.JoinQueryOver<Trainers_Graph>(t => t.trainers)
.Where(namematch)
.Select(t => t.trainers);

ただし、?matchQueryと入力すると

'NHibernate...' には 'criteria' の定義が含まれておらず、型 ... の最初の引数を受け入れる拡張メソッド 'criteria' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

では、Visual Studio Debugger を使用して、nHibernate が matchQuery に対して生成する完全な条件を一覧表示するにはどうすればよいですか?

4

1 に答える 1

1

session.QueryOver() は、文字列として表示できる優れた機能を持つ ICriteria の単なるラッパーです。基礎となる Criteria の使用にアクセスするにはmatchQuery.RootCriteria

于 2011-08-19T12:37:10.863 に答える