-5

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

为什么会这样?

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

谢谢。

4

4 回答 4

5

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

于 2013-10-17T14:25:41.563 回答
1

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

.Where(r => r.Field<string>("TIPO_DOC") != V)   
       || (r.Field<string>("TIPO_DOC") != E) ) 
于 2013-10-17T14:26:05.293 回答
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;
于 2013-10-17T14:26:18.040 回答
1

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

尝试用简单的语言表达你试图用你的 where 子句查询...

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

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

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

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

于 2013-10-17T14:34:54.493 回答