Определите, какая страница сетки будет иметь конкретную запись для отображения на экране - PullRequest
0 голосов
/ 12 марта 2019

Я использую сетку с подкачкой, которая извлекает данные с использованием Linq:

Context.Table.Where(a => a.Name.StartsWith(filter)).OrderBy(a => a.Id).Skip(skip).Take(take);

Теперь мне нужна сетка для автоматического отображения конкретной записи в пользовательском интерфейсе.Поэтому мне нужно найти страницу и относительную позицию на этой странице для этой записи.

Чтобы найти номер строки, я могу использовать SQL следующим образом:

select rn
from (
  select row_number() over (order by id) rn, id
  from table a
  where a.name like 'test%'
  --and global filters here
) a
where id = @recordId

И затем рассчитать page = rn / pageSize и position = rn % pageSize

Как сделать этот запрос SQL с использованием Linq и EF Core? (поэтому другие параметры, такие как динамическое упорядочение и глобальные фильтры, могут выполняться автоматически.)

Мне нужно сделать комментарий следующим образом:

Context.Table
    .Where(a => a.Name.StartsWith(filter))
    .OrderBy(a => a.Id)
    .Select((a, index) => new { Row = a, Index = index })
    .Where(a => a.Row.Id == recordId)
    .Select(a => a.Index)
    .FirstOrDefault();

Но этот код вызывает исключение:

Эта перегрузка метода 'System.Linq.Queryable.Select' в настоящее время неподдерживается.

...