2010-03-31 9 views
5

foreach (var person in peopleList.Where (person => person.FirstName == "Messi")) { selectPeople.Add (person); }SImplifica con LINQ - Selezione base

Mi chiedo solo se esiste un modo per semplificare questo utilizzando LINQ.

Come invece di guardare tutte le persone che stava cercando di usare LINQ basta compilare un elenco con il "Messi" 's ... stava cercando qualcosa di simile ...

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

Poi Potrei semplicemente aggiungere tutti in quella lista senza un assegno. Ma non funziona come previsto.

Forse non ha senso semplificare quell'espressione. Ma la domanda sembrava utile solo per rafforzare la mia conoscenza LINQ.

+0

ora ho 'var = selectPeople peopleList.Where (persona => person.Name == "Messi") ToList() ; quindi suppongo che la domanda riguardi davvero come utilizzare Select e SelectMany – baron

+1

'SelectMany' viene utilizzato quando ogni elemento può restituire più risultati e si desidera combinarli in un unico set di risultati. Per esempio. 'IEnumerable allChildren = person.SelectMany (person => person.GetChildren());' Non è necessario con il tuo esempio. –

+1

Inoltre, 'Seleziona' è spesso ridondante quando si utilizzano i metodi di estensione con lambdas anziché l'espressione di query. Ma se vuoi proiettare l'oggetto in qualcos'altro, usa 'Seleziona'. Ad esempio, se vuoi solo una lista di LastNames quando FirstName è uguale a "Messi", dovresti fare qualcosa come 'peopleList.Where (p => p.FirstName ==" Messi "). Seleziona (p => p.LastName) ; ', che dovrebbe risultare in un' IEnumerable 'che rappresenta il cognome di tutte le persone che corrispondono ai criteri specificati. –

risposta

5

Sei vicino. Praticamente fatto senza saperlo.

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

che creerà un IEnumerable<X>, dove X è qualsiasi tipo che è in peopleList.

La sintassi espressione di query sarebbe

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

E per ottenerlo in formato elenco concreto, credo che hai anche già scoperto l'estensione ToList().

1

Che tipo è PeopleList? Credo che debba essere un tipo di IEnumerable affinché LINQ funzioni.

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

dato che è un tipo di chiamata List<X>AsEnumerable() sulla lista e virare sulla vostra selezione e dovrebbe funzionare.

+0

è 'Lista ' – baron

+0

Provare la riga precedente e vedere se funziona, stiamo lanciando asEnumerable qui .... – Gabe

+1

'AsEnumerable()' non è necessario. Anche 'Select' comporterà un' IEnumerable 'non un' IEnumerable ' –

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

o se si dispone già di un elenco:.

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