2010-03-31 5 views
5

foreach (var personne dans peopleList.Where (person => personne.FirstName == "Messi")) { selectPeople.Add (personne); }SImplifier avec LINQ - Sélection de base

Je me demande simplement s'il existe un moyen de simplifier cela en utilisant LINQ.

Comme plutôt que de regarder tous les gens que je tentais d'utiliser LINQ pour remplir une liste simplement avec le « Messi » 's ... cherchait quelque chose comme ...

var selectPeople = peopleList.Select(x=>x.FirstName=="Messi");

Ensuite, Je pourrais juste ajouter tout le monde dans cette liste sans vérification. Mais cela ne fonctionne pas comme prévu. Il est peut-être inutile de simplifier cette expression. Mais la question semblait utile juste pour renforcer mes connaissances LINQ.

+0

J'ai maintenant 'var selectPeople = peopleList.Where (personne => person.Name == "Messi") ToList() ; 'donc je suppose que la question est vraiment sur la façon d'utiliser Select and SelectMany – baron

+1

' SelectMany' est utilisé lorsque chaque élément peut renvoyer plusieurs résultats et que vous souhaitez les combiner dans un ensemble de résultats unique. Par exemple. 'IEnumerable allChildren = person.SelectMany (person => person.GetChildren());' Vous n'en avez pas besoin avec votre exemple. –

+1

En outre, 'Select' est souvent redondant lorsque vous utilisez des méthodes d'extension avec lambdas au lieu de l'expression de requête. Mais si vous voulez projeter l'objet dans quelque chose d'autre, utilisez 'Select'. Par exemple, si vous voulez juste une liste de LastNames lorsque FirstName est égal à "Messi", vous feriez quelque chose comme 'peopleList.Where (p => p.FirstName ==" Messi "). Sélectionnez (p => p.LastName) ; ', ce qui devrait donner un' IEnumerable 'représentant les noms de toutes les personnes correspondant aux critères donnés. –

Répondre

5

Vous êtes proche. Pratiquement fait sans le savoir.

var selectPeople = peopleList.Where(x=>x.FirstName == "Messi"); 

Cela va créer un IEnumerable<X>, où X est tout type qui est dans peopleList.

La syntaxe d'expression de requête serait

var selectPeople = from person in peopleList 
        where person.FirstName == "Messi" 
        select person; 

Et pour l'obtenir sous forme de liste concrète, je crois que vous avez également déjà découvert l'extension .ToList().

1

De quel type s'agit-il? Je crois que ce doit être un type de IEnumerable pour que le LINQ fonctionne.

var selectPeople = peopleList.AsEnumerable().Select(x=>x.FirstName=="Messi"); 

Comme il est un appel sur votre sélection AsEnumerable() sur la liste et la sellerie de type List<X> et il devrait fonctionner.

+0

c'est 'Liste ' – baron

+0

Essayez la ligne ci-dessus et voir si cela fonctionne, nous cast asEnumerable ici .... – Gabe

+1

'AsEnumerable()' est inutile. En outre, 'Select' donnera un' IEnumerable 'pas un' IEnumerable ' –

1
var selectPeople = new List<Person>(peopleList.Where(x=>x.FirstName=="Messi")); 

ou si vous avez déjà une liste.

selectPeople.AddRange(peopleList.Where(x=>x.FirstName=="Messi"));