对子集合应用分页

问题描述 投票:0回答:2

如何对子集合应用分页?下面是结构。 要求是当我将页数限制设置为10时, 如果SampleDataSet中的详细信息超过10条记录,则只需显示前10条记录。所以当我应用如下所示的分页时

listSampleDataSet = listSampleDataSet .Skip(pageIndex).Take(pageSize);

它将返回10个SampleDataSet,如何应用分页,以便它只返回1个SampleDataSet,因为其中的Details集合有超过10条记录。

示例:

public class SampleDataSet
{
   int id {get;set;}
   int name {get;set;}
   List<DetailsDataSet> Details {get;set;}
}

 List<SampleDataSet> listSampleDataSet = new List<SampleDataSet>();
listSampleDataSet = listSampleDataSet .Skip(pageIndex).Take(pageSize);

它将返回 10 SampleDataSet,这是正确的,因为分页应用于主集合。如何应用分页,使其只返回一个 SampleDataSet,因为其中的 Details 集合有超过 10 条记录?

c# linq .net-core pagination
2个回答
1
投票

尝试使用 SkipTake

int pageSize = 10;
int pageNum = 1;
listSampleDataSet.Skip(pageSize * pageNum).Take(pageSize);

0
投票

如果您有权访问

DetailsDataSet
的根集合,您可以:

  1. 使用连接而不是导航属性
  2. 更改获取数据的方向:意味着您应该将
    DetailsDataSet
    作为通过父 ID 过滤的主要集合(如果您显示特定的
    SampleDataSet
    对象)并应用分页。

否则将分页功能移至

SampleDataSet
创建一个函数/属性,该函数/属性将为您提供下一页的详细信息(以及上一页),并将状态存储在对象本身中

public class SampleDataSet
{
   public int id { get; set; }
   public int name { get; set; }
   public List<DetailsDataSet> Details { get; set; }

   private int page = 0;
   private int pageSize = 10;

   public bool HasNextPage() => Details.Count > pageSize * (page + 1);   
   public IEnumerable<DetailsDataSet> GetNextPage() => Details.Skip(pageSize * page++).Take(pageSize);
    // etc...
}
© www.soinside.com 2019 - 2024. All rights reserved.