如何在 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 => c.Dt["645"]);
?
【参考方案1】:
试试这个:
list.OrderBy(c => c.Dt[<YourKeyValue>]);
【讨论】:
我认为这不是 OP 想要的。如果我理解正确,他们想在字典中按value
排序。并且由于值被定义为dynamic
,系统抛出错误
@Felix 更新了我的答案。
@MishaZaslavsky 我已经更新了我的问题以上是关于如何在 Linq C# 中使用嵌套字典对列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Linq 在 Mongo C# 2.2 驱动程序中查询嵌套列表?