使用where子句LINQ按SubList的值对列表进行排序

时间:2015-09-18 19:31:20

标签: c# linq

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

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中执行此操作?

2 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分:1)

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

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