我正在QueryOver<T>
从Expression<Func<T, bool>>
. 现在我的对象迭代列表并添加queryOver.Where(item)
被视为逻辑与的表达式。我现在希望改变它,以便给定一个指定的参数,它切换到使用逻辑 OR 附加项目,但我不知道如何做到这一点......谁能给我一个正确方向的指针?
问问题
102 次
1 回答
0
使用 OR 动态构建限制条件并不是特别简单。在Joel Potter 的博客文章中找到的方法非常好。此方法使用扩展方法向Or
QueryOver 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();
这应该会产生您需要的结果。
于 2013-05-09T21:42:38.353 回答