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

如何用LINQ在VB.NET中按Topic及子Indicator升序排序嵌套列表?

VB.NET中用LINQ实现嵌套列表的双层排序

当然可以用LINQ实现这个需求,核心是通过OrderBy分别处理外层Topic和内层Indicator的排序逻辑,以下是两种常见实现方式:

方式一:修改原对象的Indicators列表

这种方式会直接调整原Topic对象中的Indicators排序,同时生成排序后的Topic列表:

' 按Topic的name升序排序,同时对每个Topic下的Indicator按name升序排序
Dim sortedTopics = topics _
    .OrderBy(Function(topic) topic.name) _
    .Select(Function(topic)
                ' 对当前Topic的Indicators排序后重新赋值
                topic.Indicators = topic.Indicators.OrderBy(Function(ind) ind.name).ToList()
                Return topic
            End Function) _
    .ToList()

方式二:生成新的对象(不修改原数据)

如果不想改动原Topic对象的内容,可以创建新的Topic实例,保留原数据的同时生成排序后的结果:

Dim sortedTopics = topics _
    .OrderBy(Function(topic) topic.name) _
    .Select(Function(topic)
                Return New Topic With {
                    .id = topic.id,
                    .name = topic.name,
                    .Indicators = topic.Indicators.OrderBy(Function(ind) ind.name).ToList()
                }
            End Function) _
    .ToList()

关键逻辑说明

  • 外层OrderBy(Function(topic) topic.name):实现所有Topic按name字段升序排列
  • 内层OrderBy(Function(ind) ind.name):对每个Topic下的Indicator列表按name字段升序排列,最后通过ToList()将IEnumerable转换为List类型

注:你提供的示例代码存在变量复用问题(重复使用同一个t和i对象,未重新实例化),会导致最终topics列表中的数据不符合预期,建议在创建第二个Topic和新Indicator时重新执行New Topic()和New Indicator()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:20:15