Что возвращает пустой IQueryable, когда пустой? - PullRequest
5 голосов
/ 11 января 2011

Мне нужно определить, возвращается ли метод IQueryable с данными или «Пусто» при применении его к источнику данных RadGrid, например:

RadGrid.DataSource = Method(x);

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

Я пытался использовать «ноль» вместо "ууу", но безуспешно.При пошаговом выполнении кода метод IQueryable возвращается как «Пустой», но я не уверен, как проверить это с помощью оператора If.

Что возвращает метод IQueryable, как будто он возвращается как пустой, и какЯ подтверждаю это с помощью оператора If?

Ответы [ 4 ]

12 голосов
/ 11 января 2011

Вы можете использовать Any (), чтобы проверить, есть ли какие-либо элементы в IQueryable:

RadGrid.DataSource = Method(x);

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

(Или, альтернативно, более короткая версия:)

button.Enabled = Method(x).Any();
6 голосов
/ 11 января 2011

Вы хотите использовать IQueryable.Any.

bool empty = !queryable.Any();
if(empty) {
    // something
}
0 голосов
/ 11 января 2011

Попробуйте что-то вроде

RadGrid.DataSource = Method(x);            
 if (RadGrid.DataSource as MyObject == null)          
 {              
      button.Enabled = true;          
 }          
 else          
 {              
       button.Enabled = false;          
 }  
0 голосов
/ 11 января 2011

Попробуйте это:

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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...