Enumerable.Empty <T> () эквивалент для IQueryable

130

Когда метод возвращается, IEnumerable<T>и мне нечего возвращать, мы можем использовать Enumerable.Empty<T>().

Есть ли эквивалент приведенному выше для метода, возвращающего IQueryable<T>

Ньюман
источник

Ответы:

206

Может быть:

Enumerable.Empty<T>().AsQueryable();
Солнечно
источник
2
Я знаю, что в настоящее время это единственное простое, прямое и грязное ;-) решение
Нуман
7
К сожалению, при этом не создается фактический пустой IQueryable, а это означает, например, что Unionзапросы разбиваются на несколько запросов вместо одного.
NetMage
34

Enumerable.Empty<T>().AsQueryable(); должен это сделать.

мистифицировать
источник
8

Пытаться return new T[0].AsQueryable();

alejandrobog
источник
@Nauman - вы фактически создаете [пустой] массив T - фактически новый объект T не создается.
zastrowm
4

Допустим, у вас есть IQueryable<T>звонок result:

return result.Take(0);
Защитник один
источник
1

Я бы посоветовал отказаться от ответа alejandrobog, поскольку он все равно будет использовать память для создания пустого массива.

Array.Empty<T>().AsQueryable();

или

Enumerable.Empty<T>().AsQueryable();

являются предпочтительными. Array.Empty выделит статический типизированный массив, поэтому будет создан только один пустой массив T, который будет использоваться всеми пустыми запросами.

мистифицировать
источник
Array.Empty<T>доступен только после .NET Framework 4.6. Для более ранних версий можно использоватьnew object[0].Cast<T>()
TZU