C# 使用Linq将对象两个int属性值合并为去重列表的简化方法
可以通过SelectMany摊平双属性取值实现单链LINQ查询,简化后的写法如下:
var dynamicApiIds = result.Components // 每个元素返回两个待提取的可空ID .SelectMany(c => new[] { c.DynamicApiChoicesId, c.DynamicApiSubmissionsId }) // 过滤掉没有有效值的条目 .Where(id => id.HasValue) // 提取ID的有效值 .Select(id => id.Value) // 全局去重 .Distinct();
逻辑说明
- 全程只遍历一次
Components集合,性能优于拆分多次查询的写法 - 天然兼容组件仅存在单个有效ID、两个都有有效值的场景,不需要提前过滤集合
- 代码逻辑连贯,不需要声明多个中间变量
另外你原有实现存在冗余逻辑:Union方法本身已经会对两个集合取并集并自动去重,后续追加的Distinct()是完全多余的,即便不重构整体写法也可以直接移除。
内容的提问来源于stack exchange,提问作者Adjit
相关产品推荐
相关产品推荐

