2010-04-14 10 views
5

en C#, dado el siguiente código:C# Conversor LINQ resultado var al actual tipo

public class Person 
{ 
    public int PersonID { get; set; } 
    public int Age { get; set; } 
    public string Name { get; set; } 
} 

y

List<Person> people = new List<Person>(); 

    for (int i = 0; i != 15; i++) 
    { 
     Person p = new Person(); 
     p.PersonID = i; 
     p.Age = i * 12; 
     p.Name = "Name " + i; 
     people.Add(p); 
    } 


    var sortedPeople = from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople; 

¿Puedo cargar los resultados de sortedPeople de nuevo en una lista < persona> sin ¿lazo?

Gracias.

+3

Por favor, en lugar de 'for (int i = 0; i! = 15; i ++)', use 'for (int i = 0; i <15; i ++)' - algunos bucles infinitos divertidos y misteriosos pueden aparecerá si 'i' se modifica alguna vez dentro del bloque –

+0

Si no comprende que var es una declaración de tipo inferido por el compilador, no debe usar var. –

+1

@James Kolpack: los bucles infinitos son al menos fáciles de descubrir. Supongo que puede surgir un misterioso comportamiento inesperado si usas 'i <15' y descubres que puede ser más difícil (el punto es que modificar' i' dentro del bloque es un camino al infierno). –

Respuesta

10

Sí. Hay un método de extensión .ToList() disponible, por lo que todo lo que tendría que hacer es realizar una llamada de esta manera.

var sortedPeople = (from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople).ToList(); 

Ahora sortedPeople habrá un List<Person> en lugar de un IOrderedEnumerable<Person>

2
var sortedPeople = (from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople).ToList(); 
0
IEnumerable<Person> sortedPeople = from... 

fijo!

también:

List<Person> personList = sortedPeople.ToList(); 

Nota, el método ToList bucles sobre los resultados para producir esta lista.

Cuestiones relacionadas