Enumerable.Empty <T> () equivalente a IQueryable

130

Quando um método retorna IEnumerable<T>e eu não tenho nada para retornar, podemos usá-lo Enumerable.Empty<T>().

Existe um equivalente ao acima para um método retornando IQueryable<T>

Numan
fonte

Respostas:

206

Talvez:

Enumerable.Empty<T>().AsQueryable();
Ensolarado
fonte
2
Eu sei que, atualmente, que é a única ;-) solução simples, direta e sujo
Numan
7
Infelizmente, isso não cria um IQueryable vazio real, o que significa que, por exemplo, as Unionconsultas são divididas em várias consultas em vez de uma.
NetMage
34

Enumerable.Empty<T>().AsQueryable(); deve fazê-lo.

Josh
fonte
8

Experimentar return new T[0].AsQueryable();

alejandrobog
fonte
@ Nauman - você realmente cria uma matriz T [vazia] - nenhum novo objeto de T é criado.
Zastrowm
4

Digamos que você tenha IQueryable<T>chamado result:

return result.Take(0);
Protetor um
fonte
1

Eu desaconselharia a resposta de alejandrobog, pois isso ainda usará memória para criar uma matriz vazia.

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

ou

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

são preferidos. Array.Empty alocará uma matriz de tipo estático, para que apenas uma matriz vazia de T seja criada e compartilhada entre todas as consultas vazias.

Josh
fonte
Array.Empty<T>está disponível apenas após o .NET Framework 4.6. Para versões anteriores, você pode usarnew object[0].Cast<T>()
TZU