如何使用Linq根据邮编前缀列表过滤Address地址对象集合
LINQ实现Address列表按邮编前缀过滤方案
该需求完全可以通过LINQ实现,核心逻辑为Where遍历过滤+Any匹配前缀列表,具体实现如下:
前置依赖
需要先引入LINQ命名空间:
using System.Linq;
基础实现代码
// 1. 先获取强类型的Address数据源(如果DataSource本身已是强类型List<Address>可跳过Cast步骤) List<Address> addresses = _pivotGrid.DataSource.Cast<Address>().ToList(); List<string> postCodes = // 你的缩写邮编列表实例 // 2. 执行过滤逻辑 List<Address> filteredAddresses = addresses .Where(addr => // 先处理PostCode空值,避免触发空引用异常 !string.IsNullOrEmpty(addr.PostCode) // 判断当前PostCode是否匹配任意邮编前缀 && postCodes.Any(prefix => addr.PostCode.StartsWith(prefix)) ) .ToList();
可选适配(大小写不敏感匹配)
如果需要忽略邮编的大小写差异(例如ml4 3gh和前缀ML4也能正常匹配),可以调整StartsWith的匹配参数:
List<Address> filteredAddresses = addresses .Where(addr => !string.IsNullOrEmpty(addr.PostCode) && postCodes.Any(prefix => addr.PostCode.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) ) .ToList();
逻辑说明
- 外层
Where方法逐个遍历所有Address对象,仅保留符合条件的条目 - 前置空值判断避免了PostCode为null/空时调用
StartsWith抛出的空引用异常 - 内层
Any方法遍历缩写邮编列表,只要PostCode以任意一个前缀开头就符合匹配规则
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

