【问题标题】:LINQ WHERE with ORLINQ WHERE 与 OR
【发布时间】:2011-05-07 08:56:39
【问题描述】:

我使用 LINQ 来创建我的 where 子句,如下所示:

var query = from x in context.Xs
            select x;

if (y == ...)
{
    query = query.Where(x => x.Y == 1);
}

我有一堆“if .... where”语句。我遇到的问题是所有这些 where 都使用 AND 加入 where 子句,但我需要所有 where 子句才能使用 OR。有没有一种简单的方法可以将此代码移植到 where OR 代码中?或者使用 OR 最简单的方法是什么?

谢谢。

【问题讨论】:

标签: c# linq where-clause


【解决方案1】:

你可以这样做:

var query = from x in context.Xs
        where
          (x.X == 1) ||
          (x.Y == 2) ||
          (x.Z == "3")
        select x;

【讨论】:

    【解决方案2】:

    PredicateBuilder 是您问题的完美解决方案。它允许您继续将单独的“AND”和“OR”语句添加在一起。

    【讨论】:

    • 我必须将提供的链接中的类复制到我的项目中,并在 where 语句中使用 predicate.Compile()。
    【解决方案3】:

    我建议使用表达式树来动态构建您的查询:

    (MSDN) How to: Use Expression Trees to Build Dynamic Queries

    您还可以使用 PredicateBuilder(在后台执行类似的操作)动态构建 Predicate,然后将最终 Predicate 传递给 Where 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 2023-03-06
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多