Ostatnio zostałem zmuszony do zaprzyjaźnienia się z EntityFramework. Jedną z pierwszych czynności było stworzenie mechanizmu paginacji stron po stronie serwera SQL. Do tego celu stworzyłem poniższą metodę:
Niestety podczas wykonania kodu dostałem exception o treści:
public IEnumerable<TEntity> GetList(int page, Expression<Func<TEntity, int>> order, int sortDir) { List<TEntity> result; if (sortDir == 0) { result = Context.Set<TEntity>() .OrderBy(order) .Skip((page - 1)*10) .Take(20) .ToList(); } else { result = Context.Set<TEntity>() .OrderByDescending(order) .Skip((page - 1)*10) .Take(20) .ToList(); } return result; }
Incorrect syntax near ‚OFFSET’. Invalid usage of the option NEXT in the FETCH statement
Problem okazał się leżeć deklaracji ProvideManifestToken, która była niezgodna z wersją mojego serwera SQL 2008 R2 (wiem, wiem, ale takie są okoliczności przyrody :)). Zmiana wartości z 2012 na 2008 rozwiązała problem. ProvideManifestToken znajduje się w pliku .edmx.
Rozwiązanie znalazłem tutaj.