如何在NHibernate中创建一个基于集合内容进行过滤的ICriterion

时间:2011-07-26 15:27:03

标签: nhibernate

我有几个ICriterion实例,我根据用户输入以各种方式(连接,分离等)组合。我在创建基于匹配关联集合中的值的ICriterion时遇到了问题。

例如,给定Orders和OrderItems之间的一对多关系,我希望能够创建一个ICriterion来选择具有Quantity> OrderItem的所有订单。 100.

我尝试了几件事,但还没有发现任何可行的东西。

1 个答案:

答案 0 :(得分:1)

我在项目中遇到了同样的问题。每个过滤的集合需要一对别名和标准。

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) });
}