0

QueryObjectオブジェクトを切り離し、2番目のICriteriaオブジェクト基準を持っています。

        ICriteria criteria = session.CreateCriteria<Theme>()
            .CreateAlias("InceptionCycle", "ic", JoinType.LeftOuterJoin)
            .CreateAlias("ClosingCycle", "cc", JoinType.LeftOuterJoin)
            .Add(Restrictions.Le("ic.CycleMonth", cycleDate))
            .Add(Restrictions.Or(
                Restrictions.IsNull("cc.ID"),
                Restrictions.Ge("cc.CycleMonth", cycleDate)));

        QueryOver<Theme, Theme> detached = new GlobalTheme().GetQuery();

        // and now how to make new query : detached AND criteria

この2つの基準オブジェクト間でAND条件をマージ/結合/追加することは可能ですか?このようなもの(もちろん、AddメソッドはICriteriaタイプを受け入れないため、次のコード行は機能しません):

detached.DetachedCriteria.GetExecutableCriteria(session).Add(criteria).List<Theme>();

私が達成したい理由は次のとおりです。

  • GlobalThemeクエリには、他の基準と混合できるいくつかの条件があります
  • ICriteria基準には、他の基準と混合できる他の条件があります(将来、QueryObjectにリファクタリングします)

結果として、n個の可能な基準のすべての組み合わせを処理するには、少なくともn*n個のQueryObjectsを作成する必要があります。2つ以上の基準をANDすることが可能な場合は、n * QueryObject *タイプのみを作成する必要があります。

ありがとう

4

1 に答える 1

1

条件クエリを「マージ」することはできませんが、再利用のためにできることは、指定したクエリに必要な制限を追加するメソッドを作成することです。

拡張メソッドを使用した一般的な例:

var results = session.CreateCriteria<AnEntity>()
                     .Add(aSpecificRestriction)
                     .AddGenericFilters()
                     .List();

public void AddGenericFilters(this ICriteria criteria)
{
    criteria.Add(whatever);
    return criteria;
}
于 2012-07-04T12:04:40.177 に答える