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

发布于 2024-10-18 00:55:49 字数 3448 浏览 1 评论 0原文

我有一个对象

        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)我想取回先按升序排序的对象
,然后按升序排序。
3)我想删除两个嵌套 List<> 中的最后一个属性对象,因此每个对象中只有
两个对象。

如果这有点令人困惑,我深表歉意,但我想做这样的事情:

var排序 = testCollection.OrderBy(x => x.quickTest.sortField).ThenBy(y => y. QuickTest.nestedQuickTest.Select(z => 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}
                        }
                }
           }
        };

提前感谢您的帮助,我似乎无法获得我想要的结果,并且我知道我错过了一些明显的东西。

I have an object

        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) I would like to sort this object using lambda expressions.
2) I would like to get back the object sorted by the first in Asc order
and then by the in Asc order.
3) I would like to remove the last property in both nested List<> objects so there are only
two objects in each.

I apologize if this is a little confusing but I would like to do something like this:

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

The end result would be:

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

Thanks in advance for your help, I can't seem to get my desired results and I know I am missing something obvious.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抱猫软卧 2024-10-25 00:55:49

如果我理解你的意思,你想通过 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);
    }

If I understand what you are saying you want to order the objects in MyOrderList by the property with the NestedObject, which is a collection of objects who should themselves ordered by the value of the AnotherNestedObject, which is also a list.

Well first of all you need to implement a Icomparer or something like that to set the rules of what makes one list bigger than the other.

See, you want to order objects in a list by a value, if its an int, well thats easy, but being a list, what are the rules to determine which one is bigger? Is it the one with more elements? The one with biggest sum of elements?

You need to figure out this first

EDIT:

Okay I think I understand your question better, you just want to order the outer lists objects by the int, and then also have the list inside each of those elements ordered too.

I think it would be easier if you did this in 2 steps something like:

  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);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文