在子集合上应用分页

Applying pagination on subcollection

如何对子集合应用分页?下面是结构。 要求是当我将页面限制设置为 10 时, 如果SampleDataSet中的details超过10条记录,那么只需要显示前10条记录。所以当我像下面这样应用分页时

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

它将 return 10 个 SampleDataSet 如何应用分页以便它 return 只有一个 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);

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

尝试使用 Skip and Take

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

如果您有权访问 DetailsDataSet 的根集合,您可以:

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

否则将分页功能移动到 SampleDataSet 创建一个 function/property 它将为您提供下一页(以及上一页)的详细信息,并将状态存储在对象本身中

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...
}