Enumerable.Empty <T> () odpowiednik dla IQueryable

131

Gdy metoda zwraca IEnumerable<T>i nie mam nic do zwrócenia, możemy użyć Enumerable.Empty<T>().

Czy istnieje odpowiednik powyższego dla zwracanej metody IQueryable<T>

Numan
źródło

Odpowiedzi:

209

Może:

Enumerable.Empty<T>().AsQueryable();
Słoneczny
źródło
2
Wiem, obecnie jest to jedyne proste, bezpośrednie i brudne rozwiązanie ;-)
Numan
7
Niestety, nie tworzy to rzeczywistego pustego IQueryable, co oznacza, że ​​np. UnionZapytania są dzielone na wiele zapytań zamiast jednego.
NetMage
34

Enumerable.Empty<T>().AsQueryable(); powinien to zrobić.

Josh
źródło
8

Próbować return new T[0].AsQueryable();

alejandrobog
źródło
@Nauman - faktycznie tworzysz [pustą] tablicę T - w rzeczywistości nie jest tworzony nowy obiekt T.
zastrowm
4

Powiedz, że masz IQueryable<T>wezwanie result:

return result.Take(0);
Obrońca pierwszy
źródło
1

Odradzałbym odpowiedź alejandroboga, ponieważ nadal będzie ona wykorzystywać pamięć do tworzenia pustej tablicy.

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

lub

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

są preferowane. Array.Empty przydzieli statyczną tablicę o typie statycznym, więc utworzona zostanie tylko jedna pusta tablica T, która jest współdzielona przez wszystkie Empty queryables.

Josh
źródło
Array.Empty<T>jest dostępny tylko po .NET Framework 4.6. W przypadku wcześniejszych wersji możesz użyćnew object[0].Cast<T>()
TZU