为什么我的LINQ不适用于多个Where条件?

时间:2013-10-17 14:22:42

标签: c# asp.net linq

我有句子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;

为什么会这样?

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

感谢。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

尝试使用&&代替||

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 :(得分:1)

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

尝试使用简明语言表示您尝试使用where子句进行查询...

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

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

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

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