DrBob
DrBob

Reputation: 53

c# Convert LINQ var result to actual type

In c#, Given the following code:

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

and

    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;

Can I load the results of sortedPeople back into a List<Person> without a loop?

Thanks.

Upvotes: 5

Views: 11836

Answers (4)

Adriaan Stander
Adriaan Stander

Reputation: 166586

You can use

sortedPeople.ToList()

Enumerable.ToList Method

Creates a List from an IEnumerable.

Upvotes: 4

Amy B
Amy B

Reputation: 110221

IEnumerable<Person> sortedPeople = from...

Fixed!

Also:

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

Note, the ToList method loops over the results to produce this list.

Upvotes: 0

Anthony Pegram
Anthony Pegram

Reputation: 126992

Yes. There is a .ToList() extension method available, so all you would need to do is make a call to it like this.

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

Now sortedPeople will be a List<Person> instead of an IOrderedEnumerable<Person>

Upvotes: 10

BFree
BFree

Reputation: 103780

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

Upvotes: 2

Related Questions