Enumerable.Empty <T> () entspricht IQueryable

130

Wenn eine Methode zurückkehrt IEnumerable<T>und ich nichts zurückgeben kann, können wir verwenden Enumerable.Empty<T>().

Gibt es ein Äquivalent zu dem oben genannten für eine Methode, die zurückgibt? IQueryable<T>

Numan
quelle

Antworten:

206

Vielleicht:

Enumerable.Empty<T>().AsQueryable();
Sonnig
quelle
2
Ich weiß, derzeit ist das die einzige einfache, direkte und schmutzige ;-) Lösung
Numan
7
Leider wird dadurch kein tatsächlich leeres IQueryable erstellt, was bedeutet, dass z. B. UnionAbfragen in mehrere Abfragen anstatt in eine aufgeteilt werden.
NetMage
34

Enumerable.Empty<T>().AsQueryable(); Sollte es tun.

Josh
quelle
8

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

Alejandrobog
quelle
@Nauman - Sie erstellen tatsächlich ein [leeres] T-Array - es wird tatsächlich kein neues Objekt von T erstellt.
Zastrowm
4

Angenommen, Sie haben einen IQueryable<T>Anruf result:

return result.Take(0);
Beschützer eins
quelle
1

Ich würde von der Antwort von alejandrobog abraten, da dies immer noch Speicher verwendet, um ein leeres Array zu erstellen.

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

oder

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

sind bevorzugt. Array.Empty weist ein statisch typisiertes Array zu, sodass nur ein leeres Array von T erstellt wird, das von allen leeren abfragbaren Dateien gemeinsam genutzt wird.

Josh
quelle
Array.Empty<T>ist nur nach .NET Framework 4.6 verfügbar. Für frühere Versionen können Sienew object[0].Cast<T>()
TZU