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?
Zwracanie IQueryable<T> z metody
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2412
A wystarczylo zajrzec do dokumentacji... LINQ: Building an IQueryable Provider - Part I
- Rejestracja: dni
- Ostatnio: dni
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:
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2412
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
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.
- Rejestracja: dni
- Ostatnio: dni
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..