2017-02-22 1 views
1

J'essaie de filtrer une liste d'objets en utilisant un champ de recherche multi-champs. Il prend le texte, puis applique la recherche à la liste. Cependant, les adresses 2 et 3 peuvent potentiellement être vides (et dans ce cas, nulles dans les objets , la liste est composée) en fonction de l'adresse soumise.LINQ: Recherche dans plusieurs champs d'une liste d'objets où les champs peuvent être nuls

J'ai l'expression suivante. Il lance actuellement une exception car il ne peut pas, à juste titre, effectuer une recherche dans un champ nul.

Comment puis-je l'obtenir pour ignorer ou ignorer les champs nuls? Peut-il être fait dans une seule expression?

Répondre

3

Vous pouvez ajouter un peu de contrôle nul comme celui-ci

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

Merveilleux et propre. Merci! – Takarii

2

les opérations suivantes:

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

Ceci va vérifier la valeur null et

+0

je pense que ce serait encore jeter la même erreur. Le problème est la deuxième partie ne peut pas être fait – Takarii

+1

@Takarii: Il ne sera pas jeter erreur. & L'opérateur est en court-circuit. Si la première condition est fausse, elle ne vérifie pas la suivante. –

+0

Je vois, je n'étais pas au courant de ça. J'ai supposé qu'il essayerait et évaluerait les deux, puis déciderait – Takarii