2

我正在构建一个临时查询以发送到 SQL,执行以下操作:

var data = from d in db.xxxx select d;
foreach (pattern in user_stuff)
   data = data.Where(d=>SqlMethods.Like(d.item,pattern)==true);

问题是这些WHERE子句被AND放在一起。我需要OR的。

知道如何获得OR吗?

4

2 回答 2

3

我如何回答我自己的问题: PredicateBuilder

于 2009-06-12T19:47:17.760 回答
2

您需要构造一个 Expression 来表示复合 OR 谓词,然后将其传递给 Where:

var data = from d in db.xxxx select d;
Expression<Func<Data, bool>> predicate = null;
foreach (var pattern in user_stuff)
{
    Expression<Func<Data, bool>> newPredicate = d => SqlMethods.Like(d..item, pattern));
    if (predicate == null) predicate = newPredicate;
    else predicate = Expression.OrElse(predicate, newPredicate);
}
return data.Where(predicate);

编辑:这可能是 PredicateBuilder 所做的,只是更混乱:)

于 2009-06-12T19:51:08.343 回答