【问题标题】:Conditional WHERE in LINQLINQ 中的条件 WHERE
【发布时间】:2012-09-02 11:48:45
【问题描述】:

您好,您对基于搜索条件构建 LINQ 语句有什么建议吗?

我将传入一个所有参数都可为空的“SearchCriteria”类的实例。

然后我想

if (sc.a != null)
    // add to where

if (sc.b != null)
    // add to where

关键是这些是 OR 而不是 AND。

有什么建议吗?

对于积分,我想在 int 上使用“包含”?但我只能得到等于或不等于。

【问题讨论】:

  • "or" 很难组合;正确地做这涉及表达式树,通常是访问者/重写器。你有多少变量?就这两个?如果是这样,坦率地说,详尽无遗(即 3 个不同的常规行 - 一个 X,一个 Y,一个 X || Y)
  • 什么ORM? LINQ to SQL 还是实体框架?
  • 可能有十几个参数..我正在使用 EF....

标签: c# linq entity-framework tsql linq-to-entities


【解决方案1】:

试试:

.Where(x =>
    (x.a != null ? x.a == a : false) &&
    (x.b != null ? x.b == b : false));

.Where(x =>
    (x.a != null && x.a == a) ||
    (x.b != null && x.b == b));

还有:

.Where(x => new int[] { 1, 2, 3 }.Contains(x.i));

【讨论】:

  • 这似乎是一个干净而优雅的解决方案......我会看看它的扩展性如何。再说第二部分。我有一个 12345 的 int OrderID 我希望能够搜索 123 并找到 123* 字符串,你可以做。包含但你不能用整数?这可以工作吗?
  • @JonH:你想使用 RegEx 还是 Wildcard?有多种方法可以实现这一目标。我建议搜索 SO 或提出一个新问题,这很复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多