C# 带linq的C排序字典
我有一本C语言的词典:C# 带linq的C排序字典,c#,linq,C#,Linq,我有一本C语言的词典: public Dictionary<Product, int> 我想把我的结果放到一个通用列表中: List<Product> productList = new List<Product>(); 产品订购者按字典中的int值降序。我尝试过使用orderby方法,但没有成功。您可以使用以下方法: List<Product> productList = dictionary.OrderByDescending(kp =&g
public Dictionary<Product, int>
我想把我的结果放到一个通用列表中:
List<Product> productList = new List<Product>();
产品订购者按字典中的int值降序。我尝试过使用orderby方法,但没有成功。您可以使用以下方法:
List<Product> productList = dictionary.OrderByDescending(kp => kp.Value)
.Select(kp => kp.Key)
.ToList();
试试这个
List<Product> productList = dictionary.OrderByDescending(x => x.Value).Select(x => x.Key).ToList();
下面是一个使用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; }
}
}
当您说“未成功”时,您是否遇到运行时异常?或者是结果没有按照您预期的方式排序?如果提供的答案已经与您所做的匹配,您当前正在尝试什么排序代码。我在值上使用orderby,但不知道我可以使用select获取键值。所以问题解决了:也许你应该考虑使用排序字典,谢谢大家。后续问题:我是否使用Take方法获得x个结果?如果我想要一个限制,是的,你可以使用.Takex得到x个结果。如果您试图进行分页,请跳过。记住这些运算符的顺序很重要。是的,您可以使用Takeint n来限制select@Johan. 是,Take6将返回前六个结果。也可以使用Skip。例如,Skip6.Take4将跳过前6个结果并返回下一个4.pure Linq是一个非常有争议的语句,因为您的查询将编译到上面的方法链。更纯粹的是编写带有委托的IEnumerable方法链。
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; }
}
}