Enumerable.Empty <T> () equivalente para IQueryable

130

Cuando un método regresa IEnumerable<T>y no tengo nada que devolver, podemos usarlo Enumerable.Empty<T>().

¿Hay un equivalente al anterior para un método que devuelve IQueryable<T>

Numan
fuente

Respuestas:

206

Tal vez:

Enumerable.Empty<T>().AsQueryable();
Soleado
fuente
2
Lo sé, actualmente esa es la única solución simple, directa y sucia ;-)
Numan
77
Desafortunadamente, eso no crea un IQueryable vacío real, lo que significa que, por ejemplo, las Unionconsultas se dividen en múltiples consultas en lugar de una.
NetMage
34

Enumerable.Empty<T>().AsQueryable(); Deberías hacerlo.

Josh
fuente
8

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

alejandrobog
fuente
@Nauman: en realidad creas una matriz T [vacía], en realidad no se crea ningún objeto nuevo de T.
zastrowm
4

Digamos que tienes una IQueryable<T>llamada result:

return result.Take(0);
Protector uno
fuente
1

Aconsejaría contra la respuesta de alejandrobog ya que esto todavía usará memoria para crear una matriz vacía.

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

o

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

son preferidos Array.Empty asignará una matriz tipada estática para que solo se cree una matriz vacía de T y se comparta entre todas las consultas vacías.

Josh
fuente
Array.Empty<T>solo está disponible después de .NET Framework 4.6. Para versiones anteriores, puede usarnew object[0].Cast<T>()
TZU