LINQ:搜索对象列表的多个字段,其中字段可以为空
LINQ: Search multiple fields of a List of objects where fields can be null
我正在尝试使用多字段搜索框来过滤对象列表。它获取文本,然后将搜索应用于列表。但是,地址 2 和 3 可能是空白的(在这种情况下,
列表的对象)取决于提交的地址。
我有以下表达式。
Properties.Where(x => x.Address1.ToLower().Contains(senderElement.Text)
|| x.Address2.ToLower().Contains(senderElement.Text)
|| x.Address3.ToLower().Contains(senderElement.Text))
.ToList();
它目前抛出一个异常,因为它不能搜索空字段,这是正确的。
如何让它跳过或忽略空字段?可以用一个表达式完成吗?
尝试以下操作:
Properties.Where(x => (x.Address1 != null && x.Address1.ToLower().Contains(senderElement.Text))
|| (x.Address2 != null && x.Address2.ToLower().Contains(senderElement.Text))
|| (x.Address3 != null && x.Address3.ToLower().Contains(senderElement.Text)))
.ToList();
这也将检查空值
您可以像这样添加一些空检查
(x?.Address1?.ToLower()??"").Contains(senderElement?.Text??"")
我正在尝试使用多字段搜索框来过滤对象列表。它获取文本,然后将搜索应用于列表。但是,地址 2 和 3 可能是空白的(在这种情况下, 列表的对象)取决于提交的地址。
我有以下表达式。
Properties.Where(x => x.Address1.ToLower().Contains(senderElement.Text)
|| x.Address2.ToLower().Contains(senderElement.Text)
|| x.Address3.ToLower().Contains(senderElement.Text))
.ToList();
它目前抛出一个异常,因为它不能搜索空字段,这是正确的。
如何让它跳过或忽略空字段?可以用一个表达式完成吗?
尝试以下操作:
Properties.Where(x => (x.Address1 != null && x.Address1.ToLower().Contains(senderElement.Text))
|| (x.Address2 != null && x.Address2.ToLower().Contains(senderElement.Text))
|| (x.Address3 != null && x.Address3.ToLower().Contains(senderElement.Text)))
.ToList();
这也将检查空值
您可以像这样添加一些空检查
(x?.Address1?.ToLower()??"").Contains(senderElement?.Text??"")