2017-02-22 102 views
1

我想要使用多字段搜索框筛选对象的列表。它接受文本,然后将搜索应用到列表中。但是,根据提交的地址,地址2和3可能为空白(在此情况下,列表中的 对象为空)。LINQ:搜索字段可以为空的对象列表的多个字段

我有以下表达式。

Properties.Where(x => x.Address1.ToLower().Contains(senderElement.Text) 
        || x.Address2.ToLower().Contains(senderElement.Text) 
        || x.Address3.ToLower().Contains(senderElement.Text)) 
      .ToList(); 

它目前正在抛出一个异常,因为它非常正确,因此无法搜索空字段。

我怎样才能让它跳过或忽略空字段?它可以在一个表达式中完成吗?

回答

3

你可以添加一些空检查这样

(x?.Address1?.ToLower()??"").Contains(senderElement?.Text??"") 
+0

精彩和干净。谢谢! – Takarii

2

尝试以下操作:

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(); 

这将检查空值以及

+0

我认为这仍然抛出了同样的错误。问题是第二部分不能完成 – Takarii

+1

@Takarii:它不会抛出错误。操作员短路。如果第一个条件是错误的,它不会检查下一个。 –

+0

我明白了,我没有意识到这一点。我认为它会尝试和评估两个,然后决定 – Takarii