我正在构建一个临时查询以发送到 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
吗?
我正在构建一个临时查询以发送到 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
吗?
我如何回答我自己的问题: PredicateBuilder
您需要构造一个 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 所做的,只是更混乱:)