NHIbernate ICriteria условная дизъюнкция - PullRequest
0 голосов
/ 17 июня 2011

У меня есть работающие критерии, но я хочу сделать свой метод более гибким.

одна из частей моих критериев выглядит так:

    .Add(
        nhc.Restrictions.In("GroupID", groupIDs)
        || nhc.Restrictions.Eq("UserIDScheduled", userID));

но мне нужно проверить, действительно ли параметры groupID и userID имеют значения, прежде чем добавлять их сюда, потому что в противном случае я получу неожиданные результаты / запрос. например, если я хочу получить объекты, в которых GroupID находится в x, y, z, но не включать идентификатор пользователя в OR, если он нулевой.

У меня может быть трехзначный оператор IF, который делает это, но кажется, что должен быть другой способ сделать это в строке? (если userID == null, только .Add (.. In (GroupID) ..), если groupIDs == null и т. д.)

Я, очевидно, не очень хорошо знаком с API-интерфейсом ICriteria, поэтому не уверен, что это за возможности.

1 Ответ

1 голос
/ 17 июня 2011

Вы можете использовать дизъюнкцию так:

var disjunction = new Disjunction();

if (userId != null)
    disjunction.Add(Restrictions.Eq("UserIDScheduled", userID));
if (groupIDs != null)
    disjunction.Add(Restrictions.In("GroupID", groupIDs));

criteria.Add(disjunction);
...