使用LINQ从C#中的泛型List过滤值的最简单方法

Edu*_*tos 16 c# linq

我有两节课.第一个是Person,第二个是Student(继承自Person).我想过滤一个通用列表,找到所有等级高于7的学生.我提出了以下解决方案:

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;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法来过滤此列表?

Hog*_*gan 29

我看到的唯一改进是使用OfType,就像这样

var result = people.OfType<Student>().Where(s => s.Grade > 7);
Run Code Online (Sandbox Code Playgroud)

...而且我的语法更简单......但这是旁观者的眼睛.