2010-11-22 2 views
1

i ont le code suivantLINQ convertall lorsque certaines conversions peuvent être nulles

  people = positions.ConvertAll(r=> r.Person).ToList(); 

mais dans certains cas, « personne » va être nulle, dans ces cas, je ne veux pas simplement les ajouter dans la collection convertie (je ne veux pas d'objets nuls)

quelle est la meilleure façon d'y parvenir. Pouvez-vous avoir un convertall conditionnel ??

Répondre

3
people = positions 
.Where(r => r.Person !=null).ToList() 
.ConvertAll(r=> r.Person); 
+1

Ceci est incorrect. 'ConvertAll' ne peut pas être appelé sur le résultat' IEnumerable '. Ce que vous * pouvez * faire, c'est déplacer le 'ToList()' entre les appels 'Where' et' ConvertAll'. –

+0

oui c'est vrai, ont changé la mise en œuvre – Rony

2

Utilisez Where pour filtrer les occurrences null puis utilisez Select:

people = positions.Where(p => p.Person != null).Select(r => r.Person).ToList(); 
6

Avec LINQ, vous pouvez le faire:

positions.Where(r => r.Person != null) 
     .Select(r => r.Person) 
     .ToList(); 

La méthode ConvertAll ne fait pas partie de LINQ; c'est une méthode d'instance sur List<T>. Si vous voulez coller avec cela, vous pouvez faire:

positions.FindAll(r => r.Person != null) 
     .ConvertAll(r => r.Person); 

Notez que cette façon est subtilement différente parce que le résultat du filtre et la projection sont les deux List<T> s plutôt que les requêtes en streaming. Le résultat final devrait être le même.

+0

+1 pour l'explication complète –

Questions connexes