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

如何使用LINQ从嵌套列表结构中筛选匹配指定groupNumber且EffectiveDate最新的Result数据

如何使用LINQ从嵌套列表结构中筛选匹配指定groupNumber且EffectiveDate最新的Result数据

嗨,我看了你写的代码和需求,这里有几个小问题需要调整,我来一步步帮你搞定~

首先先说说你原代码里的问题:

  • 第一个Where的判断逻辑不对:x.aGroupRecord.Where(a => a.groupNumber == groupNumber)返回的是一个匹配的GroupRecord集合,而Where需要的是布尔值条件,所以应该用Any来检查当前Result的aGroupRecord列表里是否存在指定的groupNumber
  • 你嵌套的OrderByDescending语法错误,而且逻辑上应该先筛选符合条件的Result,再对这些结果按EffectiveDate排序取最新的

接下来给你两种可行的写法,根据你的.NET版本来选:

方法1:.NET 6+ 版本(推荐,更简洁高效)

用MaxBy方法直接找出符合条件的结果中EffectiveDate最大的项:

string groupNumber = "SALT";
// 建议用await替代.Result,避免阻塞线程
Root dataObject = await response.Content.ReadAsAsync<Root>();

// 先筛选出包含指定groupNumber的Result,再取其中EffectiveDate最新的
var targetResult = dataObject.result
    .Where(r => r.aGroupRecord.Any(g => g.groupNumber == groupNumber))
    .MaxBy(r => r.npi.EffectiveDate);

方法2:兼容.NET 5及以下版本

如果你的项目用的是旧版.NET,就用OrderByDescending加FirstOrDefault的组合:

string groupNumber = "SALT";
Root dataObject = await response.Content.ReadAsAsync<Root>();

var targetResult = dataObject.result
    .Where(r => r.aGroupRecord.Any(g => g.groupNumber == groupNumber))
    .OrderByDescending(r => r.npi.EffectiveDate)
    .FirstOrDefault();

代码解释

  1. 筛选条件:Where(r => r.aGroupRecord.Any(g => g.groupNumber == groupNumber)) —— 只保留那些aGroupRecord列表里存在指定groupNumber的Result项
  2. 取最新日期:
    • .MaxBy(...):直接返回集合中指定属性值最大的元素(也就是最新的EffectiveDate)
    • .OrderByDescending(...).FirstOrDefault():把符合条件的结果按日期从新到旧排序,然后取第一个元素

另外提个小建议:尽量用await response.Content.ReadAsAsync<Root>()替代.Result,后者可能会导致线程阻塞甚至死锁的问题,尤其是在异步上下文里。

备注:内容来源于stack exchange,提问作者H22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:58:09