如何在LINQ查询的FirstOrDefault方法中获取逗号分隔的多个匹配值
报错原因
你当前触发FirstOrDefault报错的核心原因是:当x.cities存储多个逗号分隔的编码时,直接拿整串编码去和citieslst里的单个SelectedValue匹配,会找不到对应项,FirstOrDefault返回null,后续访问.DisplayValue就会触发空引用异常。
修复后的实现代码
lstRecords.ForEach(x => { // 拆分逗号分隔的城市编码为单个编码集合 var cityCodeArr = x.cities.Split(',', StringSplitOptions.RemoveEmptyEntries); // 逐个匹配编码对应的城市名,过滤匹配失败的空结果 var cityNameArr = cityCodeArr .Select(code => citieslst.FirstOrDefault(ch => ch.SelectedValue == code)?.DisplayValue) .Where(name => !string.IsNullOrEmpty(name)); // 拼接为逗号分隔的城市名字符串 x.SelectedCities = string.Join(',', cityNameArr); });
逻辑说明
- 调用
Split方法拆分编码时添加StringSplitOptions.RemoveEmptyEntries参数,可自动过滤首尾逗号、连续逗号产生的无效空编码 - 匹配城市名时添加
?.空值传播运算符,避免编码不存在时触发空引用异常 - 增加
Where过滤逻辑,可把匹配不到的无效编码对应的空值剔除,避免最终结果出现多余的空内容
内容的提问来源于stack exchange,提问作者Software Engineer
相关产品推荐
相关产品推荐

