2

実行中のDetachedCriteriaにICriterionを追加して、データベースにアクセスする前に、SubTypeフィールドでNHibernateクエリをフィルタリングする方法はありますか?

私のコードは次のようになります。

DetachedCriteria detachedCriteria = DetachedCriteria.For(typeof(MyObject));

    ProjectionList projectionList = Projections.ProjectionList();
    projectionList.Add(Projections.SqlProjection("{alias}.SubType as SubType", new string[] { "SubType" }, new IType[] { TypeFactory.GetAnsiStringType(15) }));

    dc.SetProjection(projectionList);
    dc.Add(Expression.Eq("SubType", "MYOBJECT"));

    using(ISession session = ...)

    {

       ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);

    // Blows up because I don't know how to reference the SubType
    // field with an ICriterion (Expression.Eq("SubType", "MYOBJECT"))
       IList list = criteria.List();

    ...

    }

これは私の目標を達成するための正しい方法ではないかもしれませんが、ICriterionを期待/生成するインターフェイスをリファクタリングする必要があることを楽しみにしていないので、少なくとも可能であることを望んでいます。また、ICriterionオブジェクトを作成する必要がある場所の近くでセッションにアクセスできるとは限りません(ただし、使用されるさまざまなNHibernateフィールド/テーブルのエイリアシング/ネーミングを完全に制御できます)。

4

1 に答える 1

5

これに対する答えを見つけるためにかなりのグーグルを取りました、ここにあります:http: //derek-says.blogspot.com/2008/08/excepting-particular-duced-types-in.html

   ICriteria crit = sess.CreateCriteria(typeof(Mammal));  
   crit.Add( Expression.Not( Expression.Eq("class", typeof(DomesticCat)) ) );  
   List mammals = crit.List();  
于 2010-11-04T14:31:55.270 に答える