Zwracanie IQueryable<T> z metody

Zwracanie IQueryable<T> z metody
  • Rejestracja: dni
  • Ostatnio: dni
0

Szukałem w internecie przykładowych implementacji interfejsu IQueryable ale nie znalazłem nic, co mówiłoby o tym w jaki sposób najlepiej użyć ten interfejs. Jakieś best practices. Otóż można stworzyć klasę implementującą IQueryable oraz można zwrócić IQueryable<T> z metody. Jak poprawnie zaimplementować w klasie interfejs IQueryable oraz jak poprawnie zwrócić IQueryable<T> z metody? Może ktoś opisać albo podać link do artykułu, który opisywałby ten interfejs?

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
0

A wystarczylo zajrzec do dokumentacji... LINQ: Building an IQueryable Provider - Part I

  • Rejestracja: dni
  • Ostatnio: dni
0

Najwidoczniej jeszcze nie chwytam celu stosowania tego interfejsu. Wiem jakie są różnice w działaniu w porównaniu z IEnumerable. Jednak mając klasę jak poniżej:

Kopiuj
public class User
{
    public string Name { get ; set; }
    public string EMail { get; set; }
}

chciałbym aby implementowała ona interfejs IQueryable. I tutaj rodzi się pytanie (gdyż w tutorialu z powyższej strony mamy jakąś klasę Query<T>) czy jest sens? Tutaj mam klasę User chciałbym w niej wykorzystać ten interfejs. A może lepiej klasę User potraktować jako klasę modelową i stworzyć drugą, która będzie implementować ten interfejs?

Prawdę mówiąc po przeczytaniu kilku stron nie mam odpowiedzi na to jak najlepiej używać tego interfejsu.

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
1

Po co chcesz go w ogole implementowac? I to szczegolnie tak na sile?

Ten interfejs jest dla tworcow bibliotek kolekcji w celu integracji z API LINQ i kilka dodatkowych bajerkow (np. lazy query w nhibernate). Dopoki nie piszesz zadnego frameworka/biblioteki to nie ma absolutnie zadnego sensu implementowanie go.

  • Rejestracja: dni
  • Ostatnio: dni
0

No dobrze. Mój przykład z klasą użytkownika był mocno nietrafiony (wychodzi brak otrzaskania w temacie). Ale powiedzmy, że chciałbym napisać prostą bibliotekę - mam dwie tabele w bazie MSSQL, Użytkownik oraz Mieszkanie, które są powiązane. Do tego mam klasy posiadające pola jak w tych tabelach. Teraz chciałbym napisać taką klasę implementującą IQueryable aby móc wykorzystać LINQ do zawężania zapytania.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

Możesz zaimplementować IEnumerable<T> i masz działające LINQ za darmo.

To niezupełnie to samo, bo zapytania będą wykonywane na poziomie obiektów w C# a nie przez SQL w bazie, ale być może właśnie tego potrzebujesz..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.