0

我有一个分离的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 * 类型。

谢谢

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 回答