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