如何在Where 子句中获得OR?

发布于 2024-07-24 09:36:39 字数 312 浏览 8 评论 0原文

我正在构建一个临时查询以发送到 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吗?

I'm building an ad-hoc query to send to SQL doing the following:

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

The problem is that the WHERE clauses get AND'ed together. I need OR's.

Any idea how to get an OR?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执笏见 2024-07-31 09:36:39

我回答我自己的问题怎么样:
PredicateBuilder

How about I answer my own question:
PredicateBuilder

和影子一齐双人舞 2024-07-31 09:36:39

您需要构造一个表达式来表示复合 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 所做的,只是更混乱:)

You need to construct an Expression to represent the composite OR predicate, then pass that to 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);

EDIT: This is probably what PredicateBuilder does, only a lot messier :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文