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>

Respostas:


206

Talvez:

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

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.


8

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


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

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.