Eduardo de Matos Eduardo de Matos - 1 month ago 18
C# Question

Simplest way to filter value from generic List in C# using LINQ

I have two classes. The first one is Person, and the second one is Student (which inherits from Person). I want to filter a generic List and find all Students which grades are higher than 7. I came up with the following solution:

class Person
{
public string Name {get; set;}
}

class Student : Person
{
public decimal Grade {get; set;}
}

class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>();
people.Add(new Person() {Name="John"});
people.Add(new Student() {Name="Joe", Grade=6});
people.Add(new Student() {Name="Jane", Grade=8});

people.Where(delegate (Person person) {
var student = person as Student;
return student != null && student.Grade > 7;
});
}
}


Is there a simpler way to filter this list?

Answer

The only improvement I see is using OfType, like this

var result = people.OfType<Student>().Where(s => s.Grade > 7);

...and my syntax is simpler... but that is in the eye of the beholder.