2017-02-22 104 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