2010-03-31 11 views
5

foreach (var persona en peopleList.Where (person => person.FirstName == "Messi")) { selectPeople.Add (person); }Amplificación con LINQ - Selección básica

Me pregunto si hay alguna manera de simplificar esto usando LINQ.

Al igual que en vez de mirar a toda la gente que estaba tratando de utilizar LINQ que llenar sólo una lista con el "Messi" 's ... estaba intentando algo así como ...

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

Entonces Podría simplemente agregar a todos en esa lista sin un control. Pero no funciona como estaba planeado.

Quizás no tenga sentido simplificar esa expresión. Pero la pregunta parecía valiosa solo para fortalecer mi conocimiento de LINQ.

+0

Ahora tenemos 'var = selectPeople peopleList.Where (persona => person.Name == "Messi") ToList() ; 'así que supongo que la pregunta es realmente acerca de cómo usar Select y SelectMany – baron

+1

Se usa' SelectMany' cuando cada elemento puede devolver resultados múltiples y desea combinarlos en un solo conjunto de resultados. P.ej. 'IEnumerable allChildren = person.SelectMany (person => person.GetChildren());' No lo necesita con su ejemplo. –

+1

Además, 'Seleccionar 'suele ser redundante cuando se utilizan métodos de extensión con lambdas en lugar de expresión de consulta. Pero si desea proyectar el objeto en otra cosa, use 'Seleccionar'. Por ejemplo, si solo quiere una lista de LastNames cuando FirstName equivale a "Messi", haría algo como 'peopleList.Where (p => p.FirstName ==" Messi "). Select (p => p.LastName) ; ', que debería dar como resultado un' IEnumerable 'que representa los apellidos de todas las personas que coinciden con los criterios dados. –

Respuesta

5

Estás cerca. Prácticamente hecho sin saberlo.

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

que creará un IEnumerable<X>, donde X es cualquier tipo que está en peopleList.

La sintaxis de expresión de consulta sería

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

Y para conseguirlo en formato de lista concreto, creo que usted también ha descubierto ya la extensión .ToList().

1

¿Qué tipo es peopleList? Creo que debe ser un tipo de IEnumerable para que LINQ funcione.

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

ya que es una llamada List<X> tipo AsEnumerable() en la lista y la pegajosidad en su selecto y debería funcionar.

+0

es 'List ' – baron

+0

Pruebe la línea anterior y vea si eso funciona, estamos lanzando asEnumerable aquí .... – Gabe

+1

'AsEnumerable()' no es necesario. También 'Seleccionar' dará como resultado un' IEnumerable 'no un' IEnumerable ' –

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

o si ya tiene una lista:.

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