我正在从QueryOver<T>
列表中构建一个NHibernate Expression<Func<T, bool>>
。现在,我的对象迭代列表并使用被视为逻辑AND的queryOver.Where(item)
添加表达式。我现在希望改变它,以便给定一个指定的参数,它切换到使用逻辑OR附加项目,但我无法弄清楚如何做到这一点......任何人都可以给我一个指向正确方向的指针吗? / p>
答案 0 :(得分:0)
使用OR动态构建限制条件并不是特别简单。 Joel Potter's blog post中的方法非常好。此方法使用扩展方法向QueryOver API添加Or
方法,该API接受ICriterion
数组。
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);
}
}
}
然后,可以使用此扩展方法构建OR
ed约束:
var l = new List<ICriterion>();
foreach(var item in expressionList)
l.Add(Restrictions.Where(item));
s.QueryOver<Order>()
.Or(l.ToArray())
.List();
这应该产生您需要的结果。