136 votes

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

Lorsqu'une méthode renvoie IEnumerable<T> et je n'ai rien à rendre, nous pouvons utiliser Enumerable.Empty<T>() .

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

214voto

Sunny Points 3189

Peut-être :

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

2 votes

Je sais, c'est actuellement la seule solution simple, directe et sale ;-).

8 votes

Malheureusement, cela ne crée pas un véritable IQueryable vide, ce qui entraîne, par exemple, les problèmes suivants Union les requêtes sont divisées en plusieurs requêtes au lieu d'une seule.

0 votes

@NetMage C'est vrai. Ce qui est plus déroutant, c'est que votre code n'est pas cassé dans la ligne où est Union mais probablement quand tu essaieras quelque chose après ça. Cette réponse est acceptée et votée mais elle peut être très trompeuse. @Sunny Veuillez modifier votre réponse. La réponse à cette question m'a aidé : Enumerable.Empty<T>().AsQueryable() ; Cette méthode supporte l'infrastructure LINQ to Entities et n'est pas destinée à être utilisée directement depuis votre code. .

34voto

Josh Points 38617

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

7voto

alejandrobog Points 1499

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

0 votes

@Nauman - vous créez en fait un tableau T [vide] - aucun nouvel objet de T n'est créé.

4voto

Protector one Points 1546

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

return result.Take(0);

3voto

Josh Points 241

Je déconseille la réponse d'alejandrobog, car cela utilisera encore de la mémoire pour créer un tableau vide.

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

ou

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

sont préférables. Array.Empty allouera un tableau statique typé, de sorte qu'un seul tableau vide de T soit créé et partagé entre tous les interrogeables Empty.

0 votes

Array.Empty<T> n'est disponible qu'après .NET Framework 4.6. Pour les versions antérieures, vous pouvez utiliser new object[0].Cast<T>()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X