【问题标题】:C# Linq to query a List to see if a value is empty or nullC# Linq 查询 List 以查看值是空还是 null
【发布时间】:2021-09-28 12:43:10
【问题描述】:

假设我有一个 USAddressModel

 class Address {
      public string addressline1 {get; set;}
      public string addressline2 {get; set;}
      public string city {get; set;}
      public string state {get; set;}
      public string zip {get; set;}
 }

如果我的 C# 代码中有一个对象,例如

var customer = response.Result; // List<Address>

如何使用 Linq 查询此列表以创建两个列表

第一个列表应包含将商品运送给客户所需的最低要求(addressline1、城市州和邮政编码)。

第二个名单应该是那些没有填写完整邮寄地址的人。 (就像只提供了一个 zip 或 addressline2、city state、zip)

我知道有人可以在 addressline2 字段中键入 addressline1,但出于此目的,我只是想学习如何在 C# 中通过 linq 使用查询。

使用 Lambda 会更好地解决这个问题吗?

感谢您的帮助。

【问题讨论】:

  • 我强烈建议先以一种天真的方式尝试它,然后再尝试像 LINQ 这样的高级东西。如果您从未听说过 LINQ,您会怎么做?您需要采取哪些步骤来实现这一目标?这些步骤构建了您的算法。然后将其翻译成一些程序。

标签: c# linq


【解决方案1】:

试试这个:

var listOne = response.Result.Where(x => !string.IsNullOrEmpty(x.addressline1) &&
 !string.IsNullOrEmpty(x.city) &&
 !string.IsNullOrEmpty(x.state) &&
 !string.IsNullOrEmpty(x.zip)).ToList();

var listTwo = response.Result.Where(x => string.IsNullOrEmpty(x.addressline1) ||
 string.IsNullOrEmpty(x.city) ||
 string.IsNullOrEmpty(x.state) ||
 string.IsNullOrEmpty(x.zip)).ToList();

【讨论】:

  • 为什么使用 .Where 而不是 .Any?
  • OP 要求List
  • @softwareisfun 因为Any() 将返回truefalse 以告诉您搜索的元素是否存在。 Where() 将返回与 List 匹配的所有元素。这就像“告诉我Any 元素是否存在”和“返回所有元素Where 地址不为空”。
【解决方案2】:

由于一个列表是另一个列表的补充,您也可以这样做:

var customer = response.Result;  
var listOne = customer.Where(x => !string.IsNullOrEmpty(x.addressline1) &&    
                                      !string.IsNullOrEmpty(x.city) &&
                                      !string.IsNullOrEmpty(x.state) &&
                                      !string.IsNullOrEmpty(x.zip)).ToList();
var listTow = customer.Where(x => !listOne(y => y.Equals(x))).ToList();    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多