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

Смежные вопросы