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

如何使用纯LINQ(含Lambda)获取所有子列表的最大ID值?

纯LINQ实现获取所有Animal ID的全局最大值

嘿,先提个小细节:你当前的foreach循环代码其实有个逻辑问题——它每次迭代都会把max覆盖成当前Area下Animal ID的最大值,最后返回的只是最后一个Area里的最大ID,而不是所有Area下所有Animal的ID最大值。如果这不是你想要的结果,咱们用纯LINQ来修正并简化它:

最直观的方案:用SelectMany展平嵌套列表

SelectMany的作用就是把多层嵌套的列表“摊平”成一个单一序列,之后直接取最大值就好,这是最符合LINQ风格的写法:

int max = myZoo.AreaList
               .SelectMany(area => area.AnimalList) // 把所有Area里的Animal合并成一个大列表
               .Select(animal => animal.ID)         // 提取每个Animal的ID字段
               .Max();                              // 取全局最大值

嫌步骤多?可以把Select合并到SelectMany里,让代码更紧凑:

int max = myZoo.AreaList
               .SelectMany(area => area.AnimalList.Select(animal => animal.ID))
               .Max();

优化:处理空列表的边界情况

如果你的AreaList可能为空,或者某个Area的AnimalList是空的,直接调用Max()会抛出InvalidOperationException。这时候可以加个DefaultIfEmpty来兜底:

// 当没有任何Animal时,返回0(你可以换成你需要的默认值)
int max = myZoo.AreaList
               .SelectMany(area => area.AnimalList.Select(animal => animal.ID))
               .DefaultIfEmpty(0)
               .Max();

或者用可空类型来处理,再做默认值转换,灵活性更高:

int? maxNullable = myZoo.AreaList
                        .SelectMany(area => area.AnimalList.Select(animal => animal.ID))
                        .Max();
int max = maxNullable ?? 0; // 无数据时返回0,按需修改

这样写不仅完全用LINQ实现了需求,还修正了原代码的逻辑问题,同时考虑了空列表的异常情况~

内容的提问来源于stack exchange,提问作者Marcel Grüger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:55