You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中使用Linq按嵌套字典值对List集合进行排序

错误原因

你传入OrderBy的参数返回的是IEnumerable<dynamic>类型的集合序列,不是单个可比较的值,排序逻辑无法直接对集合序列做大小比较,因此抛出了要求实现IComparable接口的异常。

解决方法

你只需要直接取出字典中Smile键对应的单个值,显式转换为你实际存储的可比较类型(比如int、string等)即可,按实际场景可选用两种写法:

  1. 确定所有Col对象的Dt字典都包含Smile键,且值类型统一
// 示例中假设Smile对应的值是int类型,你可以根据实际存储的类型替换转换逻辑
var sortedList = list.OrderBy(x => (int)x.Dt["Smile"]).ToList();
  1. 不确定是否存在Smile键,需要做异常兼容
var sortedList = list.OrderBy(x => 
{
    if (x.Dt.TryGetValue("Smile", out var value))
    {
        // 转换为实际存储的类型,示例为int
        return (int)value;
    }
    // 不存在该键的对象默认排到最后,可根据需求调整默认值
    return int.MaxValue;
}).ToList();

如果需要降序排序,把OrderBy替换为OrderByDescending即可。


内容的提问来源于stack exchange,提问作者Betsq9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:00:01