用where子句LINQ按子列表的值排序

本文关键字:列表 排序 where 子句 LINQ | 更新日期: 2023-09-27 18:13:18

我有一个像这样的对象结构

public class Obj1
   {
      public string Name {get; set;}
      public List<KeyValuePair<int, double>> PairList {get; set;}
   }

如果我有一个Obj1的列表,我如何能够根据Pair列表中的最大值来排序该列表,其中key是一个特定的值。例如这个对象

       List<Obj1> foo = new List<Obj1>()
            {
                new Obj1()
                {
                    Name = "Foo",
                     PairList = new List<KeyValuePair<int, double>>()
                     {
                         new KeyValuePair<int, double>(1,20),
                         new KeyValuePair<int, double>(2,25),
                         new KeyValuePair<int, double>(3,30)
                     }
                },
                    new Obj1()
                {
                        Name = "Bar",
                     PairList = new List<KeyValuePair<int, double>>()
                     {
                         new KeyValuePair<int, double>(1,20),
                         new KeyValuePair<int, double>(2,60),
                         new KeyValuePair<int, double>(3,30)
                     }
                },
                        new Obj1()
                {
                        Name = "Test",
                     PairList = new List<KeyValuePair<int, double>>()
                     {
                         new KeyValuePair<int, double>(1,20),
                         new KeyValuePair<int, double>(2,35),
                         new KeyValuePair<int, double>(3,30)
                     }
                }
            };

如果我想按上面的列表排序,其中Key为2,我希望列表的顺序是以下名称

Bar
Test
Foo

我如何在LINQ中做到这一点?

用where子句LINQ按子列表的值排序

试试这个

var result= foo.OrderByDescending(x => x.PairList[1].Value);

您必须从PairList中获取max值,并使用它来对对象进行排序。

var result = foo.OrderByDescending(x => x.PairList.Max(v => v.Value));