Как создать ICriterion в NHibernate, который фильтрует на основе содержимого коллекции - PullRequest
1 голос
/ 26 июля 2011

У меня есть несколько экземпляров ICriterion, которые я комбинирую различными способами (конъюнкция, дизъюнкция и т. Д.) В зависимости от пользовательского ввода.У меня проблемы с созданием ICriterion, основанного на сопоставлении значения в связанной коллекции.

Например, учитывая отношение один-ко-многим между Orders и OrderItems, я хочу иметь возможность создать ICriterion, который выбирает все Order, которые имеют OrderItem с количеством> 100.* Я попробовал несколько вещей и пока не нашел ничего, что работает.

1 Ответ

1 голос
/ 26 июля 2011

У меня была такая же проблема в проекте. вам нужна пара псевдонимов и критериев для каждой отфильтрованной коллекции.

KeyValuePair<string, ICriterion[]> collectionfilters = GetFromSomeWhere();

foreach (var association in collectionfilters)
{
    criteria.CreateAlias(association.Key, association.Key);

    foreach(var crit in association.Value)
    {
        criteria.Add(crit);
    }
}

// example
KeyValuePair<string, ICriterion[]> GetFromSomeWhere()
{
    return new KeyValuePair<string, ICriterion[]>("OrderItems", new []{ Restrictions.Gt("OrderItems.Quantity", 100) });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...