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

C# 使用LINQ基于属性值搜索嵌套列表元素并获取符合条件的最早日期

实现方案

完全可以通过LINQ实现该需求,核心借助SelectMany方法展平多层嵌套的集合,再做筛选排序即可,代码比循环实现更简洁易读,同时规避了参考实现中的逻辑漏洞。

最终LINQ代码

// 返回符合要求的最早日期,无匹配数据时返回DateTime.MinValue
DateTime earliestSundayDate = customerOrder.OrderLines
    // 展平所有OrderLine下的OrderDate集合,把嵌套的二层列表变成一层OrderDate集合
    .SelectMany(line => line.OrderDates)
    // 筛选Day字段为Sunday的记录
    .Where(date => date.Day == "Sunday")
    // 按日期升序排列
    .OrderBy(date => date.Date)
    // 取排序后第一条的Date值,无匹配则返回默认值
    .Select(date => date.Date)
    .FirstOrDefault();

参考实现的已知问题

你提供的参考代码存在几处逻辑/写法错误,使用LINQ实现时可直接规避:

  • 属性名不匹配:你定义的OrderDate模型只有Day和Date两个属性,参考代码中误用了不存在的DateTypeId、ActualDate属性,运行会报错
  • 空引用风险:若某条OrderLine下没有符合条件的OrderDate,FirstOrDefault会返回null,直接访问属性会触发空引用异常
  • 排序逻辑无效:OrderBy方法返回新的排序后序列,不会修改原dates列表,原代码最终取到的是未排序的第一个元素,不符合「取最早日期」的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:04