Empty IQueryable在Empty时返回什么?

时间:2011-01-11 20:26:13

标签: c# null iqueryable

我需要确定IQueryable方法是否返回Data,或者将其应用于RadGrid的DataSource时为“Empty”,如下所示:

RadGrid.DataSource = Method(x);

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

我尝试使用“null”代替“yyy”,但没有成功。单步执行代码时,IQueryable方法返回“Empty”,但我不确定如何使用If语句验证它。

IQueryable方法返回的内容就像返回Empty一样,如何使用If语句验证?

4 个答案:

答案 0 :(得分:12)

您可以使用Any()检查IQueryable中是否有任何元素:

RadGrid.DataSource = Method(x);

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

(或者,更短的版本:)

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

答案 1 :(得分:6)

您想使用IQueryable.Any

bool empty = !queryable.Any();
if(empty) {
    // something
}

答案 2 :(得分:0)

尝试类似

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

答案 3 :(得分:-2)

试试这个:

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

由于Enumerable.Empty<TResult>()TResult缓存,因此它将与Method重新命名的空序列保持相同的引用,因此将是等同的。

如果您不确定这是否有效,请运行此示例:

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));
    }
}