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

如何在NHibernate中创建基于集合内容过滤的ICriterion,nhibernate,Nhibernate,我有几个ICriterion实例,我根据用户输入以各种方式(连接、分离等)组合它们。我在创建基于匹配关联集合中的值的ICriterion时遇到问题 例如,给定Orders和OrderItems之间的一对多关系,我希望能够创建一个ICriterion,用于选择具有数量>100的OrderItem的所有订单 我试过几种方法,但还没有找到任何有效的方法 我在一个项目中遇到了同样的问题。对于每个筛选的集合,您需要一对别名和条件 KeyValuePair<string, ICriterion[]&g

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

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


我试过几种方法,但还没有找到任何有效的方法

我在一个项目中遇到了同样的问题。对于每个筛选的集合,您需要一对别名和条件

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) });
}
KeyValuePair collectionfilters=GetFromSomeWhere();
foreach(collectionfilters中的变量关联)
{
criteria.CreateAlias(association.Key,association.Key);
foreach(关联中的var crit.Value)
{
标准。添加(crit);
}
}
//范例
KeyValuePair GetFromAnywhere()
{
返回新的KeyValuePair(“OrderItems”,new[]{Restrictions.Gt(“OrderItems.Quantity”,100)});
}

我在一个项目中遇到了同样的问题。对于每个筛选的集合,您需要一对别名和条件

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) });
}
KeyValuePair collectionfilters=GetFromSomeWhere();
foreach(collectionfilters中的变量关联)
{
criteria.CreateAlias(association.Key,association.Key);
foreach(关联中的var crit.Value)
{
标准。添加(crit);
}
}
//范例
KeyValuePair GetFromAnywhere()
{
返回新的KeyValuePair(“OrderItems”,new[]{Restrictions.Gt(“OrderItems.Quantity”,100)});
}

谢谢,菲罗,这很有效。我一直在尝试使用限制。Where(lambda表达式)是为了避免使用“魔术字符串”,但我无法让它工作。谢谢,Firo,这很有效。我一直在尝试使用限制。Where(lambda表达式)来避免使用“魔术字符串”,但我无法让它工作。