Nhibernate 如何从表达式列表创建逻辑OR<;Func<;T、 布尔>&燃气轮机;
我正在从Nhibernate 如何从表达式列表创建逻辑OR<;Func<;T、 布尔>&燃气轮机;,nhibernate,Nhibernate,我正在从表达式列表中构建一个NHibernate查询。现在,我的对象迭代列表并使用queryOver.Where(item)添加表达式,该表达式被视为逻辑and。现在我想更改它,以便给定一个指定的参数,它会切换到使用逻辑OR追加项,但我不知道如何执行此操作。。。有人能给我一个指向正确方向的指针吗?用ORs动态地构建限制条件并不是特别简单。在中找到的方法相当好。这种方法使用扩展方法将或方法添加到接受ICriterion数组的QueryOver API中 public static class Ex
表达式
列表中构建一个NHibernate查询。现在,我的对象迭代列表并使用queryOver.Where(item)
添加表达式,该表达式被视为逻辑and。现在我想更改它,以便给定一个指定的参数,它会切换到使用逻辑OR追加项,但我不知道如何执行此操作。。。有人能给我一个指向正确方向的指针吗?用ORs动态地构建限制条件并不是特别简单。在中找到的方法相当好。这种方法使用扩展方法将或
方法添加到接受ICriterion
数组的QueryOver API中
public static class Extensions
{
public static IQueryOver<troot, tsubtype>
Or<troot, tsubtype>(this IQueryOver<troot, tsubtype> input, ICriterion[] criteria)
{
if (criteria.Length == 0)
return input;
else if (criteria.Length == 1)
return input.Where(criteria[0]);
else
{
var or = Restrictions.Or(criteria[0], criteria[1]);
for (int i = 2; i < criteria.Length; i++)
or = Restrictions.Or(or, criteria[i]);
return input.Where(or);
}
}
}
这将产生您需要的结果
var l = new List<ICriterion>();
foreach(var item in expressionList)
l.Add(Restrictions.Where(item));
s.QueryOver<Order>()
.Or(l.ToArray())
.List();