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

时间:2014-07-31 08:51:25

标签: c# linq

假设我的结构如下:

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和该列表中每个B的顺序排列的, 它的CList也是由它的OrderId订购的。

这些是我与EF6一起使用的模型,而类A,B,C对应于db表。

我花了一些时间来尝试&#39; linq-ify&#39;这,但没有成功。它可行吗?

编辑:Sort a list and all its nested objects using Linq

的副本

1 个答案:

答案 0 :(得分:2)

好的,因为没有人想回答,你现在不再添加更多内容是我现在的看法:

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)
    };
}

返回一个{em>已排序的A列表,其中包含一个输入列表/可枚举IEnumerable<A> input,您只需要

var sorted = input.Select(SortEverything);

顺便说一句:你的班级有一些问题 - 当然你必须公开这些属性:

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