如何在 Linq C# 中使用嵌套字典对列表进行排序?

Posted

技术标签:

【中文标题】如何在 Linq C# 中使用嵌套字典对列表进行排序?【英文标题】:How to sort a List using a nested Dictionary in Linq C#? 【发布时间】:2021-11-02 01:50:47 【问题描述】:

我有这样的列表

public class Col

    public long Id  get; set; 
    public Dictionary<string, dynamic> Dt  get; set; 


var list = IEnumerable<Col>;

我需要使用字典对列表进行排序

我尝试了很多方法,但没有任何帮助,出现错误:

System.ArgumentException: At least one object must implement IComparable.

我最后停下来的是:

list.OrderBy(x => x.Dt.Where(r => r.Key == "Smile").Select(r => r.Value));

应按字典值排序

更新1:

我想对我选择的块进行排序,但不是按 Id 排序,而是按字典中的数据排序

【问题讨论】:

字典有多个值,在考虑实现之前,您需要定义结果的外观。您应该添加一些示例数据来澄清这一点。 ***.com/questions/5333571/… 我已经更新了我的问题 目前还不清楚“按数据排序”是什么意思。您想按产品名称(键 646)或货号(键 647)或变体键(键 650)或价格进行排序,还是要传入用于排序的键?密钥是否会修复(=产品名称始终为密钥 646)?如果您为您的产品创建一个类,也许它会简化事情? 听起来像list.OrderBy(c =&gt; c.Dt["645"]);? 【参考方案1】:

试试这个:

 list.OrderBy(c => c.Dt[<YourKeyValue>]);

【讨论】:

我认为这不是 OP 想要的。如果我理解正确,他们想在字典中按value 排序。并且由于值被定义为dynamic,系统抛出错误 @Felix 更新了我的答案。 @MishaZaslavsky 我已经更新了我的问题

以上是关于如何在 Linq C# 中使用嵌套字典对列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Linq 在 Mongo C# 2.2 驱动程序中查询嵌套列表?

如何使用linq c#优化嵌套循环并从另一个列表中过滤

如何使用 LINQ 使用嵌套属性对列表进行排序

如何一次对字典或列表中的所有嵌套字典和列表进行排序?

使用 LINQ 根据 C# 中的属性值搜索嵌套在另一个列表中的列表中的项目?

在Python列表中对嵌套字典进行排序? [复制]