【问题标题】:How to implement pagination in webapi如何在 webapi 中实现分页
【发布时间】:2021-07-26 15:37:32
【问题描述】:

如何在webapi dotnet core中实现分页?

我尝试使用 Skip / take ,但是当只涉及 1 个表时, skip / take 可以工作。在我的情况下,我必须加入几个表然后实现分页。

var searchList = _context.Table1
 .Include(b => b.Table2)
 .Include(c => c.Table3)
 .Include(c => c.Table4)
 .Include(c => c.Table5)
 .Include(c => c.Table6)                
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)            
.ToList();

当涉及多个表时,实现分页的更好方法是什么?

【问题讨论】:

  • 这能回答你的问题吗? Skip and Take in Entity Framework Core
  • 我看到提供的链接建议我在使用我所做的 Skip / Take 之前使用 OrderBy。但是还是不行。
  • 哪个 EF Core 版本?
  • 我使用的是3.1.14核心版本
  • 所以要对Table2、Table3等应用分页??你知道Include 不是join 而是加载相关实体的指令。它是如何在 EF 中实现的,这是另一个讨论。但永远不要将Include 视为 JOIN。

标签: .net linq .net-core pagination entity-framework-core


【解决方案1】:

考虑到this MSDN 文档,您可以在 .NET 5 SDK 及更高版本中使用带有 Where 子句的过滤包含。 .NET 5 及更高版本中的 Include Where 子句支持此操作:

  • 在哪里
  • OrderBy(降序)
  • ThenBy(降序)
  • 跳过
  • 拍摄

你的查询可以是这样的:

var query = _context.Table1
      .Include(b => b.Table2.Skip((pageNumber - 1) * pageSize).Take(pageSize))             
      .Skip((pageNumber - 1) * pageSize)
      .Take(pageSize)  
      .ToList();

【讨论】:

  • 如果我有多个表怎么办,在这种情况下,我需要为所有表应用 take/skip 吗? var query = _context.Table1 .Include(b => b.Table2.Skip((pageNumber - 1) * pageSize).Take(pageSize)) .Include(b => b.Table3.Skip((pageNumber - 1) * pageSize).Take(pageSize)) .Include(b => b.Table4.Skip((pageNumber - 1) * pageSize).Take(pageSize)) .Include(b => b.Table5.Skip((pageNumber - 1 ) * pageSize).Take(pageSize)) .Skip((pageNumber - 1) * pageSize) .Take(pageSize) .ToList();
  • 是的,你应该在它的 Include() 查询中设置每个表的所有分页。
猜你喜欢
  • 2011-02-25
  • 2017-03-07
  • 2021-07-11
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多