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();