Я использую сетку с подкачкой, которая извлекает данные с использованием 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' в настоящее время неподдерживается.