如何在NHibernate中合并两个标准/查询对象

如何在NHibernate中合并两个标准/查询对象,nhibernate,Nhibernate,我有一个查询对象对象分离的和第二个ICriteria对象标准 ICriteria criteria = session.CreateCriteria<Theme>() .CreateAlias("InceptionCycle", "ic", JoinType.LeftOuterJoin) .CreateAlias("ClosingCycle", "cc", JoinType.LeftOuterJoin)

我有一个查询对象对象分离的和第二个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
ICriteria criteria=session.CreateCriteria()
.CreateAlias(“InceptionCycle”、“ic”、JoinType.LeftOuterJoin)
.CreateAlias(“ClosingCycle”、“cc”、JoinType.LeftOuterJoin)
.Add(Restrictions.Le(“ic.CycleMonth”,cycleDate))
.添加(限制)或(
Restrictions.IsNull(“cc.ID”),
通用电气(“抄送CycleMonth”,cycleDate));
QueryOver distached=new GlobalTheme().GetQuery();
//现在如何进行新的查询:分离和条件
是否可以在这两个条件对象之间合并/连接/添加和条件?类似这样的内容(当然,下面的代码行不能作为Add方法dot acceptICriteriatype):

detached.DetachedCriteria.GetExecutableCriteria(会话).Add(标准).List();
我想要实现的原因是:

  • GlobalTheme查询具有一些可以与其他标准混合的条件
  • ICriteria标准还有其他条件,也可以与其他标准混合使用(将来我会将其重构为QueryObject)
因此,为了处理所有n可能标准的组合,我必须至少创建n*n查询对象。如果可以创建两个或两个以上的标准,我只需要创建n*QueryObject*类型

多谢

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

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

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

public void AddGenericFilters(this ICriteria criteria)
{
    criteria.Add(whatever);
    return criteria;
}
var results=session.CreateCriteria()
.Add(特殊限制)
.AddGenericFilters()
.List();
public void AddGenericFilters(此ICriteria标准)
{
标准。添加(无论什么);
退货标准;
}
var results = session.CreateCriteria<AnEntity>()
                     .Add(aSpecificRestriction)
                     .AddGenericFilters()
                     .List();

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