2012-12-13 57 views
1

目前,我有一个包含数据水果,等级和价格的表格。我的表格中可用的等级是A,BC请看代码片段。正如你所看到的,我把D放在where过滤器中。我想query将为空。但是在我运行代码之后,程序会提示“Not Null?WTH?”。那么,我是否可以知道query中的内容以及如何检测D如果它不在表格中?LINQ - 如果查询不存在的元素,结果不为空

P/S:我是新手

C#代码片段:

var query = (from p in db 
       where p.grade == "D" 
       select p.price).ToArray(); 

if (query == null) 
       System.Console.WriteLine("You get Null in the query"); 
else if (query != null) 
       System.Console.WriteLine("Not Null? WTH?"); 

回答

4

因为你正在做ToArray,它永远不会为空。你可以检查长度。

if(query.Length <= 0) 

或者即使你做的更好:

var query = (from p in db 
      where p.grade == "D" 
      select p.price).Count(); 

if(query > 0) 

var ifItemExist = (from p in db 
        where p.grade == "D" 
        select p.price).Any(); 

或更短:

var ifItemExist = db.Any(p=> p.grade == "D"); 
+1

oh ya!array.length .......该死的,我的大脑卡在了中午,感谢您的解答+1 C = – 0070

+0

@ 0070,不客气 – Habib

2

其实,这是不为空,它返回一个空与null不同的数组。

交替,你可以做到这一点,

int query = (from p in db 
       where p.grade == "D" 
       select p.price).Count(); 

if (query > 0) 
{ 
    System.Console.WriteLine("Found"); 
} 
    else 
{ 
    System.Console.WriteLine("Not Found"); 
} 
3

你并没有空,因为这个方法仍然会返回一个数组。该数组将为空,但该数组不会为空。 (这实际上是为什么存在空值......它是为了区分“零”值和缺少值

如果要测试结果中是否有任何元素,可以使用:

if (query.Any())