2012-12-13 68 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())