【问题标题】:Why My LINQ does not work with multiple Where conditions?为什么我的 LINQ 不适用于多个 Where 条件?
【发布时间】:2013-10-17 14:22:42
【问题描述】:

我有这句话linq来过滤一个DataTable:

string V = @"V";
var DTError = from DTError1 in DT.AsEnumerable()
              .Where(r => ( (r.Field<string>("TIPO_DE_DOCUMENTO") != V) ))
              select DTError1;

这个 linq 有效;但是当我在 linq 不起作用的地方添加另一个条件时(见下文)

string V = @"V";
string M = @"M";

var DTError = from DTError1 in DT.AsEnumerable()
              .Where(r => ( (r.Field<string>("TIPO_DE_DOCUMENTO") != V) )
                             || (r.Field<string>("TIPO_DE_DOCUMENTO") != M))
              select DTError1;

为什么会这样?

我知道这是一个非常棘手的问题,但文档对我没有帮助。

谢谢。

【问题讨论】:

  • 你的数据源是什么?你确定有'TIPO_DOC'的条目既不是V也不是E...... 至于TIPO_DOC;这是什么类型的字段名?
  • 总是扩展“不起作用”。
  • 您的查询本质上是在查找 TIPO_DE_DOCUMENTO 不等于 V 或不等于 M 的记录。如果它 = M 那么它!= V 反之亦然,因此您的 where 对于所有记录都是正确的。

标签: c# asp.net linq


【解决方案1】:

我认为您需要 AND 运算符 (&&) 而不是 OR (||)。

【讨论】:

    【解决方案2】:

    试试&amp;&amp; 而不是||

    string V = @"V";
        string E = @"E";
        var DTError = from DTError1 in DT.AsEnumerable()
                      .Where(r => (r.Field<string>("TIPO_DOC") != V) &&    
                                  (r.Field<string>("TIPO_DOC") != E))
                      select DTError1;
    

     string V = @"V";
            string E = @"E";
            var DTError = from DTError1 in DT.AsEnumerable()
                          .Where(r => (r.Field<string>("TIPO_DOC") != V))   
                          .Where(r => (r.Field<string>("TIPO_DOC") != E))
                          select DTError1;
    

    【讨论】:

      【解决方案3】:

      在这种情况下,您确实希望使用 && 而不是 ||。

      尝试用通俗易懂的语言表达你试图用你的 where 子句查询...

      如果我有一系列汽车,并且我想选择满足以下条件的所有汽车:

      汽车不是红色的或汽车不是蓝色的

      我会得到所有的汽车,因为任何不满足第一部分(不是红色)的汽车必须满足第二部分(毕竟只有红色汽车不满足条件的第一部分,而红色汽车是不是蓝色)。

      我在相反的情况下看到了很多变化,当试图获得所有蓝色汽车和所有红色汽车时,人们经常使用“其中颜色 = 红色 && 颜色 == 蓝色”。 出于类似的原因,这不会产生预期的结果。

      【讨论】:

        【解决方案4】:

        我认为您的括号有问题,您希望它们都在第一个括号内:

        .Where(r => r.Field<string>("TIPO_DOC") != V)   
               || (r.Field<string>("TIPO_DOC") != E) ) 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-26
          • 1970-01-01
          • 1970-01-01
          • 2019-06-13
          • 2015-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多