Enumerable.Empty <T> () équivalent pour IQueryable

130

Quand une méthode retourne IEnumerable<T> et que je n'ai rien à renvoyer, nous pouvons utiliser Enumerable.Empty<T>().

Existe-t-il un équivalent à ce qui précède pour une méthode retournant IQueryable<T>

Numan
la source

Réponses:

206

Peut être:

Enumerable.Empty<T>().AsQueryable();
Ensoleillé
la source
2
Je sais, actuellement c'est la seule solution simple, directe et sale ;-)
Numan
7
Malheureusement, cela ne crée pas un IQueryable vide, ce qui signifie que les Unionrequêtes sont par exemple divisées en plusieurs requêtes au lieu d'une seule.
NetMage
34

Enumerable.Empty<T>().AsQueryable(); devrait le faire.

Josh
la source
8

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

Alejandrobog
la source
@Nauman - vous créez en fait un tableau T [vide] - aucun nouvel objet de T n'est réellement créé.
zastrowm
4

Dites que vous avez un IQueryable<T>appelé result:

return result.Take(0);
Protecteur un
la source
1

Je déconseillerais la réponse d'alejandrobog car cela utilisera toujours la mémoire pour créer un tableau vide.

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

ou

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

sont préférés. Array.Empty allouera un tableau typé statique afin qu'un seul tableau vide de T soit créé et partagé entre tous les objets de requête vides.

Josh
la source
Array.Empty<T>est uniquement disponible après .NET Framework 4.6. Pour les versions antérieures, vous pouvez utilisernew object[0].Cast<T>()
TZU