使用c#Lambda表达式对对象中的嵌套列表进行排序

时间:2011-02-16 17:57:05

标签: c# lambda generic-list

我有一个对象

        TestCollection testCollection = new TestCollection()
        {
           new Test
           {
             quickTest = 
                new QuickTest
                {
                    id = a,
                    sortField = 3,
                    nestedQuickTest = 
                        new List<NestedQuickTest>
                        {
                            new NestedQuickTest{sortField = 1},
                            new NestedQuickTest{sortField = 2},
                            new NestedQuickTest{sortField = 3},
                            new NestedQuickTest{sortField = 4},
                        }
                }
           },

           new Test
           {
             quickTest = 
                new QuickTest
                {
                    id = b,
                    sortField = 2,
                    nestedQuickTest = 
                        new List<NestedQuickTest>
                        {
                            new NestedQuickTest{sortField = 21},
                            new NestedQuickTest{sortField = 32},
                            new NestedQuickTest{sortField = 11},
                            new NestedQuickTest{sortField = 2},
                        }
                }
           },

           new Test
           {
             quickTest = 
                new QuickTest
                {
                    id = c,
                    sortField = 1,
                    nestedQuickTest = 
                        new List<NestedQuickTest>
                        {
                            new NestedQuickTest{sortField = 3},
                            new NestedQuickTest{sortField = 2},
                            new NestedQuickTest{sortField = 8},
                            new NestedQuickTest{sortField = 1},
                        }
                }
           },
        };

1)我想使用lambda表达式对此对象进行排序。
2)我想在Asc顺序中取回按第一个排序的对象,然后按Asc顺序取回 3)我想删除嵌套List&lt;&gt;中的最后一个属性物体,每个物体只有两个物体
如果这有点令人困惑我道歉但我想做这样的事情:

var sorted = testCollection.OrderBy(x =&gt; x.quickTest.sortField).ThenBy(y =&gt; y.quickTest.nestedQuickTest.Select(z =&gt; z.sortField))。Take(2);


最终结果将是:

        TestCollection testCollection = new TestCollection()
        {

           new Test
           {
             quickTest = 
                new QuickTest
                {
                    id = c,
                    sortField = 1,
                    nestedQuickTest = 
                        new List<NestedQuickTest>
                        {
                            new NestedQuickTest{sortField = 1},
                            new NestedQuickTest{sortField = 2}
                        }
                }
           },

           new Test
           {
             quickTest = 
                new QuickTest
                {
                    id = b,
                    sortField = 2,
                    nestedQuickTest = 
                        new List<NestedQuickTest>
                        {
                            new NestedQuickTest{sortField = 2},
                            new NestedQuickTest{sortField = 11}
                        }
                }
           }
        };

在此先感谢你的帮助,我似乎无法得到我想要的结果,而且我知道我遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:1)

如果我理解你要说的是你想通过具有NestedObject的属性在MyOrderList中对对象进行排序,NestedObject是一个对象集合,它们本身应该按照AnotherNestedObject的值排序,它也是一个列表。

首先,你需要实现一个Icomparer或类似的东西来设置使一个列表比另一个更大的规则。

请参阅,您希望按值对列表中的对象进行排序,如果它是一个int,那很容易,但作为一个列表,有哪些规则可以确定哪一个更大?它是具有更多元素的那个吗?具有最大元素总和的那个?

你需要弄清楚这个

编辑:

好的,我想我更了解你的问题,你只想通过int命令外部列表对象,然后在每个订购的元素中也有列表。

我认为如果你通过以下两个步骤执行此操作会更容易:

  var orderedTestCollection = testCollection.Orderby(tc=>tc.quickTest.SortField) // orders all the testCollection objects


    //orders and only takes 2 elements of the lists inside the each test collection object
    foreach(var tc in testCollection)
    {
       tc.quickTest.NestedQuickTest = tc.quickTest.NestedQuickTest.Orderby(nqt=>nqt.SortField).Take(2);
    }