/ / Skip nie jest obecnie obsługiwane przez wyjątek zestawu narzędzi Data Service - asp.net, linq, formularze internetowe

Pomiń nie jest obecnie obsługiwany przez wyjątek zestawu narzędzi Data Service - asp.net, linq, formularze internetowe

Próbuję zapytać oDataService. Jeśli spróbuję pominąć, pojawia się komunikat "Pomiń nie jest obecnie obsługiwany przez wyjątek zestawu narzędzi usług danych". Bez pomijania moje zapytanie zostanie wykonane.

Dim Students = S in Entity.Students
Select S
OrderBy S.FirstName
Skip(PageSize * PageNumber).Take(PageSize)

Jeśli opuszczę Take, to nadal działa. Jak mogę to naprawić? Czy istnieje inny sposób tworzenia stronicowania w linq?

Odpowiedzi:

0 dla odpowiedzi № 1

Pozwól, że udzielę odpowiedzi tutaj dla jasności i upewnię się, że kod jest jaśniejszy.

Ten błąd jest generowany przez dostawców LINQ, którzy to robiąnie obsługuje żadnej metody rozszerzenia, której próbujesz użyć. W tym przypadku oznacza to, że zestaw narzędzi Data Service nie obsługuje metody Skip. Twoim jedynym rozwiązaniem jest uzyskanie wszystkiego, czego potrzebujesz, a następnie pominięcie tych, których nie potrzebujesz. Wymaga to zmuszenia LINQ do wykonania kwerendy i zwrócenia wszystkich danych do ciebie jako listy.

Dim BatchStudents = S in Entity.Students
Select S
OrderBy S.FirstName
Take(PageSize * PageNumber + PageSize).ToList()

Dim Students = BatchStudents.Skip(PageSize * PageNumber).ToList()

Dzielenie ich na oddzielne stwierdzenia (i zmienne) pomoże w śledzeniu wszelkich dalszych problemów z rzutowaniem.

Ostrzeżenie: Wykonanie tego, jak jest, spowoduje pobranie rozmiaru strony *PageNumber + PageSize elementy ze źródła danych, więc spodziewamy się dużego pobrania tych zdalnych danych w miarę wzrostu liczby stron. Dzieje się tak tylko dlatego, że dostawca nie obsługuje przeskakiwania. Pierwsza funkcja ToList () wymusza LINQ, aby wykonać zapytanie i uzyskać wyniki. Drugie przypisanie zmiennych polega na pomijaniu elementów w pamięci (elementy są już pobrane).