【问题标题】:How to paginate data from child object in EF?如何在 EF 中对子对象的数据进行分页?
【发布时间】:2012-10-23 12:07:57
【问题描述】:

我有问题。

我想给ClassA分页。

ClassA 有一个ClassB 类型的元素列表,ClassB 有一个ClassC 类型的元素列表。

如何按来自ClassC 的元素数对数据进行分页?

public class ClassA
{
    public ICollection<ClassB> ClassBCollection { get; set; }
}

public class ClassB
{
    public ICollection<ClassA> ClassACollection { get; set; }

    public ICollection<ClassC> ClassCCollection { get; set; }
}

public class ClassC
{
    public ICollection<ClassB> ClassBCollection { get; set; }
}

A 类 | B 类   | C类
数据1 |内部数据 |内内数据1
| |内内数据2
| |内内数据3
| |内内数据4
| | InnerInnerData5(在此处分页)

提前致谢。

【问题讨论】:

  • 你的代码还好吗? B 类中有 C 类的集合。C 类中也有 B 类的集合,这是一个永无止境的循环?
  • 是的。没错,EF 通过这种方式解决了多对多的关系。

标签: c# .net entity-framework c#-4.0 entity-framework-4


【解决方案1】:

可以在 B 类中添加方法 GetPageRange()

    public ICollection<ClassC> GetPageRange(int startingPage, int pagesPerPage)
    {
        return (from c in ClassCCollection
                select c).Skip(startingPage).Take(pagesPerPage).ToList();
    }

【讨论】:

    【解决方案2】:

    我可以用 System.Linq.Queryable 解决 解决方案如下:

    var result =  from A in DataContext<A>()
                  .Include(x => x.B)
                  .Include(x => x.B.C)
                  .Orderby(x => x.C)
                  .ThenBy(x => x.B)
                  .ThenBy(x => x.A)
                  .Skip(pageNumber * pageSize)
                  .Take(pageSize);
    

    这就是大家! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 2019-06-09
      • 2022-01-21
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2011-10-02
      相关资源
      最近更新 更多