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

如何在LINQ中按createdDate排序嵌套StatInfo的DemoInfo列表?

用LINQ对嵌套实体类列表按指定字段排序的实现方案

首先先把你给出的实体类代码放出来,方便后续参考:

public class DemoInfo 
{ 
    public string name; 
    public List<StatInfo> stat; 
    public string workLocation; 
}

public class StatInfo 
{ 
    public string contact; 
    public DateTime createdDate; 
    public string action; 
}

这里有个核心点需要明确:每个DemoInfo实例对应一个StatInfo的集合,所以排序时你得先确定是基于这个集合里的哪一条createdDate来排序——比如取集合里最新的日期、最早的日期,还是默认取第一条?下面我分几种常见场景给你写实现代码:

场景1:按每个DemoInfo关联的最新Stat记录日期排序(降序)

如果你想让拥有最新StatInfo的DemoInfo排在最前面,可以用Max()获取每个集合里的最大日期,再降序排序:

// 假设你已经有了DemoInfo的数据源列表
List<DemoInfo> demoList = GetYourDemoData();

// 按最新的createdDate降序排序
var sortedByLatestStat = demoList
    .OrderByDescending(demo => demo.stat.Max(stat => stat.createdDate))
    .ToList();

场景2:按每个DemoInfo关联的最早Stat记录日期排序(升序)

如果要让最早创建StatInfo的DemoInfo排在前面,就用Min()取最小日期,再升序排序:

var sortedByEarliestStat = demoList
    .OrderBy(demo => demo.stat.Min(stat => stat.createdDate))
    .ToList();

场景3:每个DemoInfo的stat集合只会有一条数据

这种情况就简单了,直接取集合的第一条数据的createdDate即可:

var sortedBySingleStatDate = demoList
    .OrderBy(demo => demo.stat.First().createdDate)
    // 要是需要降序就换成OrderByDescending
    .ToList();

重要注意事项

别忘了处理stat集合为空的情况!如果你的数据里可能出现demo.stat是null或者空列表的情况,一定要加空判断,避免空引用异常:

var safeSortedList = demoList
    .OrderByDescending(demo => demo.stat?.Max(stat => stat.createdDate) ?? DateTime.MinValue)
    .ToList();

这里用了空合并运算符??,当stat为空时,默认用DateTime.MinValue作为排序值,你也可以根据业务需求换成其他默认值。

另外,如果需要多条件排序(比如先按workLocation分组排序,再按createdDate排序),可以链式调用ThenBy或者ThenByDescending来实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:57