2011-01-11 110 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;   
}