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

C# LINQ 按属性分组后对空、非空键执行不同筛选规则的实现问题

C# 自定义类列表LINQ分组筛选实现方案

你原有代码的核心问题是Select分支返回值类型不统一:非空键分组返回单个ABC实例,空/Null键分组返回分组集合,最终得到的列表元素类型不统一,无法得到你预期的全ABC类型的5条结果。

正确实现代码

通过SelectMany将每个分组的返回结果统一为IEnumerable<ABC>后自动展平即可:

var result = list.GroupBy(x => x.A)
                 .SelectMany(g => 
                 {
                     if (!string.IsNullOrEmpty(g.Key))
                         // 非空有效键仅返回分组第一个元素,包装为单元素集合
                         return new[] { g.First() };
                     // 空/Null键返回分组全部元素
                     return g;
                 })
                 .ToList();

效果验证

运行后result.Count值为5,完全匹配需求:

  • 键为"a"的分组返回1条
  • 键为null的分组返回2条
  • 键为""的分组返回2条

简化写法

可以用三元运算符压缩逻辑:

var result = list.GroupBy(x => x.A)
                 .SelectMany(g => string.IsNullOrEmpty(g.Key) ? g : new[] { g.First() })
                 .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:36:02