使用Linq按条件过滤对象列表 按RegionName筛选指定区域数据
错误原因
你原有代码的问题有两点:
List.ForEach()方法返回值为void,无法将其执行结果转为List<CasesDto>赋值给data变量,所以会触发类型不匹配报错- 你仅调用了
Where做筛选,没有将筛选结果重新赋值给CasesDto的Region属性,筛选逻辑本身也不会生效
实现方案
方案1:直接修改原有集合对象
如果不需要保留原始数据,直接遍历修改每个CasesDto的Region属性即可:
// 替换为你要筛选的区域名 string targetRegion = "ce"; data.ForEach(x => { x.Region = x.Region.Where(t => t.RegionName == targetRegion).ToList(); });
执行后data里的每个元素的Region列表就只会保留符合条件的项。
方案2:生成新的筛选集合(不修改原始数据)
如果需要保留原始的data数据不变,可以用Select投影生成全新的结果集合:
string targetRegion = "ce"; List<CasesDto> filteredData = data.Select(x => new CasesDto { Date = x.Date, Region = x.Region.Where(t => t.RegionName == targetRegion).ToList() }).ToList();
提示:如果你的业务场景里
Region属性可能为null,可以在筛选前加判空逻辑,避免空引用异常,例如:x.Region = x.Region?.Where(t => t.RegionName == targetRegion).ToList() ?? new List<RegionData>();
内容的提问来源于stack exchange,提问作者Amadej Šenk
相关产品推荐
相关产品推荐

