2013-10-17 104 views
-5

我有这句话的LINQ to filtring一个DataTable:为什么我的LINQ不能在多个条件下工作?

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; 

这是为什么happend?

我知道这是一个很不错的问题,但是documentacion不能帮助我。

谢谢。

+0

什么是您的数据来源?你确定有'TIPO_DOC'的条目既不是V也不是E'...至于TIPO_DOC;这是一个什么样的字段名称? –

+1

总是展开“不起作用”。 –

+1

您的查询主要是查找TIPO_DE_DOCUMENTO不等于V或不等于M的记录。如果它= M,那么它!= V,反之亦然,因此您的位置对于所有记录均为真。 –

回答

5

我想你想要一个AND运算符(& &)而不是OR(||)。

+0

非常感谢,我会标记这个问题。 –

1

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

.Where(r => r.Field<string>("TIPO_DOC") != V) 
     || (r.Field<string>("TIPO_DOC") != E)) 
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; 

OR

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; 
1

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

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

如果我有车的集合,我想选择满足以下条件的所有汽车:

车不是红色或车不是蓝色

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

我已经看到了相反的情况下就这么多的变化,试图让所有的蓝色轿车和全红车,在这种情况下永世经常使用“其中的color = red & &颜色==蓝色”的时候。 由于类似的原因,这不会产生预期的结果。

相关问题