如何在NHibernate中合并两个标准/ QueryObjects

时间:2012-07-04 09:46:51

标签: nhibernate

我有 QueryObject 对象分离,我有第二个 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

是否可以在这两个标准对象之间合并/加入/添加AND条件?这样的事情(当然下面的代码行不起作用,因为Add方法不接受 ICriteria 类型):

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

我想要实现的原因是:

  • GlobalTheme 查询有一些条件可以与其他标准混合使用
  • ICriteria标准还有其他条件也可以与其他标准混合使用(我将来会将它重构为QueryObject)

因此,为了处理 n 可能标准的所有组合,我必须创建至少n * n QueryObjects 。如果可以AND两个或更多个标准,我只需要创建 n * QueryObject *类型。

由于

1 个答案:

答案 0 :(得分:1)

无法“合并”条件查询,但您可以为重用做的是创建一个方法,将您想要的任何限制添加到指定的查询。

一般示例,使用扩展方法:

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

public void AddGenericFilters(this ICriteria criteria)
{
    criteria.Add(whatever);
    return criteria;
}