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

C# 使用Linq查询Address列表拆分有效与不完整邮寄地址

实现方案

Lambda 表达式实现(更推荐)

合格地址的判断规则为 addressline1、city、state、zip 四个字段均不为空/空白字符串,使用 string.IsNullOrWhiteSpace 做判断可覆盖用户输入空格的异常场景:

// 满足发货要求的有效地址列表
var validAddresses = customer
    .Where(addr => !string.IsNullOrWhiteSpace(addr.addressline1)
                && !string.IsNullOrWhiteSpace(addr.city)
                && !string.IsNullOrWhiteSpace(addr.state)
                && !string.IsNullOrWhiteSpace(addr.zip))
    .ToList();

// 未填写完整的无效地址列表
var invalidAddresses = customer
    .Where(addr => string.IsNullOrWhiteSpace(addr.addressline1)
                || string.IsNullOrWhiteSpace(addr.city)
                || string.IsNullOrWhiteSpace(addr.state)
                || string.IsNullOrWhiteSpace(addr.zip))
    .ToList();

如果列表数据量较大,不想遍历两次集合,可以用 ToLookup 实现一次遍历完成分组,性能更优:

var addressGroups = customer.ToLookup(addr => 
    !string.IsNullOrWhiteSpace(addr.addressline1)
    && !string.IsNullOrWhiteSpace(addr.city)
    && !string.IsNullOrWhiteSpace(addr.state)
    && !string.IsNullOrWhiteSpace(addr.zip));

var validAddresses = addressGroups[true].ToList();
var invalidAddresses = addressGroups[false].ToList();

LINQ 查询语法实现

该写法更适合多表关联、多层嵌套分组/排序的复杂场景,当前简单过滤场景下代码量会更长:

var validAddresses = (from addr in customer
                     where !string.IsNullOrWhiteSpace(addr.addressline1)
                        && !string.IsNullOrWhiteSpace(addr.city)
                        && !string.IsNullOrWhiteSpace(addr.state)
                        && !string.IsNullOrWhiteSpace(addr.zip)
                     select addr).ToList();

var invalidAddresses = (from addr in customer
                     where string.IsNullOrWhiteSpace(addr.addressline1)
                        || string.IsNullOrWhiteSpace(addr.city)
                        || string.IsNullOrWhiteSpace(addr.state)
                        || string.IsNullOrWhiteSpace(addr.zip)
                     select addr).ToList();

Lambda 适用性说明

这个场景使用 Lambda 表达式非常合适:

  • 需求仅为简单的条件过滤,Lambda 写法简洁紧凑,筛选逻辑直观可见
  • 不需要额外的查询语法关键字,代码量更少,可读性没有损失
  • 后续如果需要链式追加排序、字段投影等操作,Lambda 的链式写法也更方便维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:45:03