Мне нужно преобразовать некоторые разбитые на страницы данные из Linq в Entity Framework.Данные должны отображаться в MVC Contrib Grid / Pager, поэтому их нужно разбивать на страницы, а внутренний сервер SQL должен разбивать данные на страницы.
Итак, у меня есть этот код в качестве рабочей базы:
MyEntities db = new MyEntities();
IQueryable<HighScore> highscores = db.HighScores.OrderBy(s => s.Id);
return View(highscores.AsPagination(page.GetValueOrDefault(1), 10));
Это генерирует довольно постраничный SQL-запрос с SELECT TOP (10) ... WHERE rownum ETC..
Отличное разбиение на страницы SQL Server, как это должно быть.
Так что теперь мне нужно преобразовать мои сущности в немного другую модель.
private HighScoreModel GetUrlForImage(string userId, int? score, bool isAnonymous)
{
return new HighScoreModel
{
// transformation, left out for simplicity
};
}
Я не могу просто сделать:
var fixedData = from v in highscores
select GetUrlForImage(v.UserId, v.Score, v.IsAnonymous);
, потому что это даст мне (ожидаемый): LINQ to Entities does not recognize the method 'MvcContribTest.Models.HighScoreModel GetUrlForImage(System.String, System.Nullable
1 [System.Int32], Boolean) 'метод,и этот метод не может быть переведен в выражение хранилища.
Поэтому мне нужно ToList()
сущностей, чтобы вызвать мой метод перевода, что-то вроде этого:
var fixedData = from v in highscores.ToList()
select GetUrlForImage(v.UserId,v.Score,v.IsAnonymous);
Что технически сейчасработает, но я потерял нумерацию страниц SQL-сервера, потому что преобразование ToList()
из IQueryable()
.
Как я могу выполнить нумерацию страниц на стороне сервера в этом сценарии?