2011-01-11 106 views
5

我需要確定一個IQueryable方法是否有數據返回,或「空」,它適用於一個radgrid控件像這樣一個數據源時:使用「零」的地方的Empty IQueryable在Empty時返回什麼?

RadGrid.DataSource = Method(x); 

     if (Method(x) == yyy) 
     { 
      button.Enabled = true; 
     } 
     else 
     { 
      button.Enabled = false; 
     } 

我曾嘗試「yyy」但沒有成功。在遍歷代碼時,IQueryable方法返回爲「Empty」,但我不確定如何使用If語句來驗證。

是什麼一個IQueryable方法的返回,如果它返回爲空,而我怎麼能驗證使用IF語句?

回答

12

你可以用任何()進行檢查,看是否有在任何IQueryable的元素:

RadGrid.DataSource = Method(x); 

if (Method(x).Any()) 
{ 
    button.Enabled = true; 
} 
else 
{ 
    button.Enabled = false; 
} 

(或者,在較短的版本:)

button.Enabled = Method(x).Any(); 
-2

試試這個:

if (Method(x) == Enumerable.Empty<YourType>()) 
{ 
    // Your code 
} 

由於Enumerable.Empty<TResult>()被緩存TResult將持有同一基準從Method reterned空序列,因此將equatable。

如果你不確定這是否會工作,請運行這個例子:

using System; 
using System.Linq; 

class Example 
{ 
    static void Main() 
    { 
     var first = Enumerable.Empty<Example>(); 
     var second = Enumerable.Empty<Example>(); 

     Console.WriteLine(object.ReferenceEquals(first, second)); 
    } 
} 
+0

我認爲這是一個參考一般來說比較失敗。 – jason 2011-01-11 20:30:35

+0

-1這將執行參考比較。這應該是顯而易見的,爲什麼這幾乎不適用於所有情況。如果方法返回`Enumerable.Empty ()`,它將*僅工作,並且在大多數情況下它將返回其他沒有元素的枚舉。 – cdhowie 2011-01-11 20:30:57

0

嘗試類似

RadGrid.DataSource = Method(x);    
if (RadGrid.DataSource as MyObject == null)   
{    
     button.Enabled = true;   
}   
else   
{    
     button.Enabled = false;   
}