使用linq对嵌套列表进行排序

本文关键字:排序 列表 嵌套 linq 使用 | 更新日期: 2023-09-27 18:15:42

假设我有一个如下结构:

class A {
    IEnumerable<B> BList {get;set;}
}
class B {
    IEnumerable<C> CList {get;set};
    int OrderId {get;set;}
}
class C {
    int OrderId {get;set;}
}

我想返回一个As的列表,其中它的BList是按它的OrderId排序的,它的CList也是按它的OrderId排序的。

这些是我在EF6中使用的模型,类A、B、C对应于数据库表。

我花了一些时间试图"澄清"这一点,但没有成功。这可行吗?

EDIT:重复使用Linq 对列表及其所有嵌套对象进行排序

使用linq对嵌套列表进行排序

好吧,因为没有人想回答,你也不想添加更多内容。这是我目前对它的看法:

public static A SortEverything(A input)
{
    return new A
    {
        BList = 
            input.BList
            .Select(b =>
                new B
                {
                    OrderId = b.OrderId,
                    CList = b.CList.OrderBy(c => c.OrderId)
                })
            .OrderBy(b => b.OrderId)
    };
}

要返回具有一个输入列表/可枚举IEnumerable<A> input的按顺序排序A列表,您只需要

var sorted = input.Select(SortEverything);

BTW:你的课程中有一些问题——当然你必须公开属性:

class A {
    public IEnumerable<B> BList {get; set;}
}
class B {
    public IEnumerable<C> CList {get; set; }
    public int OrderId {get;set;}
}
class C {
    public int OrderId {get;set;}
}