c#使用linq排序字典

Joh*_*han 11 c# linq

我在c#中有一本字典:

public Dictionary<Product, int>
Run Code Online (Sandbox Code Playgroud)

我想将结果列入通用列表:

List<Product> productList = new List<Product>();
Run Code Online (Sandbox Code Playgroud)

产品订购商按字典中的int值降序.我尝试过使用orderby方法,但没有成功.谢谢!

dri*_*iis 25

你可以这样做:

List<Product> productList = dictionary.OrderByDescending(kp => kp.Value)
                                      .Select(kp => kp.Key)
                                      .ToList();
Run Code Online (Sandbox Code Playgroud)


Ben*_*son 5

MyDict.OrderByDescending(x => x.Value).Select(p => p.Key).ToList();
Run Code Online (Sandbox Code Playgroud)


Ste*_*cya 5

试试这个

List<Product> productList = dictionary.OrderByDescending(x => x.Value).Select(x => x.Key).ToList();
Run Code Online (Sandbox Code Playgroud)


cry*_*ted 5

这是使用LINQ查询语法的示例.

 public class TestDictionary 
    {
        public void Test()
        {
            Dictionary<Product, int> dict=new Dictionary<Product, int>();
            dict.Add(new Product(){Data = 1}, 1);
            dict.Add(new Product() { Data = 2 }, 2);
            dict.Add(new Product() { Data = 3 }, 3);
            dict.Add(new Product() { Data = 4 }, 9);
            dict.Add(new Product() { Data = 5 }, 5);
            dict.Add(new Product() { Data = 6 }, 6);

            var query=(from c in dict 
                orderby c.Value descending 
                select c.Key).ToList();       
        }
        [DebuggerDisplay("{Data}")]
        public class Product
        {
            public int Data { get; set; }
        }           
    }
Run Code Online (Sandbox Code Playgroud)