У меня есть отсоединенный объект 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

Можно ли объединить / присоединить / добавить условие И между этими двумя объектами критериев? Примерно так (конечно, следующая строка кода не работает, поскольку метод Add не принимает тип ICriteria ):

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

Причина, по которой я хочу достичь:

  • В запросе GlobalTheme есть некоторые условия, которые можно смешивать с другими критериями.
  • Критерии ICriteria имеют другое условие, которое также можно смешивать с другими критериями (в будущем я реорганизую его до QueryObject).

В результате для обработки всей комбинации n возможных критериев мне пришлось бы создать как минимум n * n QueryObjects . Если возможно И два или более критерия, мне нужно создать только n * QueryObject * типов.

Благодарность

0
dragonfly 4 Июл 2012 в 13:46

1 ответ

Лучший ответ

Невозможно «объединить» запросы с критериями, но для повторного использования вы можете создать метод, который добавляет любые ограничения, которые вы хотите, к указанному запросу.

Общий пример с использованием метода расширения:

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

public void AddGenericFilters(this ICriteria criteria)
{
    criteria.Add(whatever);
    return criteria;
}
1
Diego Mijelshon 4 Июл 2012 в 16:04