【问题标题】:How concat where in linq [closed]如何在linq中连接[关闭]
【发布时间】:2012-10-01 09:15:23
【问题描述】:

我有结构如果:

if()
{
  query = query.Where(....)
}

if()
{
   query = query.Where(....)
}

因为它们对这两个测试一起工作,并且不会相互覆盖?

【问题讨论】:

  • 您可以在 Where 子句中添加 && 运算符
  • -1。请正确说出你的问题
  • @nawfal - 是的,就像使用“your”而不是“ur”。
  • 你的意思是要根据外部条件完成一个where子句? (例如,如果“用户是匿名的”,他的搜索将受到进一步限制)
  • 您好,您的问题被否决了,因为它的措辞非常糟糕并且没有做出任何努力。尝试改进它,你会得到更好的响应

标签: c# linq


【解决方案1】:

因为它们对这两个测试一起工作,并且不会相互覆盖?

您的代码将(取决于if()s 中的结果)链接查询。

最终的结果将是所有.Where(...) s 都应用于源。

【讨论】:

    【解决方案2】:

    您应该能够链接您的查询表达式:

    query = query.Where(....).Where(....);
    

    【讨论】:

      【解决方案3】:

      如果你想在创建谓词时有一些灵活性,我建议LinqKit。使用此库,您可以动态构建 Where 子句,例如:

      if(condition)
      {
         predicate.And(something);
      }
      if(otherCondition)
      {
         predicate.Or(somethingElse);
      }
      var result = source.Where(predicate);
      

      它有开源代码,非常容易理解,基于Expression类,实际上是Linq使用的。

      还值得注意的是,结果仅在需要时才计算 - 因此为 Linq2SQL 创建条件是一个很好的解决方案。

      【讨论】:

        【解决方案4】:
        var flg1 = cond1 == null? true : cond1;
        var flg2 = cond2 == null? true : cond2;
        
        var result = query.Where(flg1 && flg2)
        

        您也可以使用DynamicQuery library。然后就可以用like了

        query.Where("field1=1 and field2=2");
        

        【讨论】:

        • 请说明当 cond1 和 cond2 是引用查询中使用的数据表的 sql 条件时,这将如何工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-14
        • 2016-11-08
        相关资源
        最近更新 更多