确定哪个网格页面将具有要在屏幕上显示的特定记录

时间:2019-03-12 10:52:36

标签: c# linq sql-server-2012 entity-framework-core ef-core-2.2

我正在使用带有分页的网格,该网格使用Linq来获取数据:

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

现在,我需要一个网格以自动在UI中显示特定记录。因此,我需要为此记录找到一个页面以及该页面上的相对位置。

要查找行号,我可以这样使用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 / pageSizeposition = rn % pageSize

如何使用Linq和EF Core进行此SQL查询?(因此可以自动进行其他设置,例如动态排序和全局过滤器。)

我需要像这样贴面:

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'的重载为   当前不支持。

0 个答案:

没有答案