C#Linq where子句根据属性名称

tug*_*erk 8 c# linq asp.net asp.net-mvc entity-framework

假设我有以下课程:

public class Person { 

    public string FirstName { get; set; }
    public string SurName { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

此外,我有以下方法,我通过存储库与人员数据联系.

public IEnumerable<Person> getPeople(string searchField, string searchTerm) { 

    //_repo.GetAll() returns IEnumerable<Person>
    var model = _repo.GetAll(); 

    //Need the logic here for filtering

    return model;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我为该方法获得了两个参数:searchFieldsearchTerm.

searchField用于字段名称,其值将用于过滤.searchTerm是用来与重复值进行比较的值(对不起,如果我在这里不清楚,但这是我能提出的最多)

我通常会做的如下:

public IEnumerable<Person> getPeople(string searchField, string searchTerm) { 

    //_repo.GetAll() returns IEnumerable<Person>
    var model = _repo.GetAll(); 

    switch(searchField) { 

        case "FirstName":
            model = model.Where(x => x.FirstName == searchTerm);
            break;

        case "SurName":
            model = model.Where(x => x.SurName == searchTerm);
            break;

        //Keeps going
    }

    return model;

}
Run Code Online (Sandbox Code Playgroud)

哪个会好起来的.但是如果我对我的类进行了更改,那么如果我在这个类中添加新属性,那么这段代码将会发生变化或者缺少某些函数.

我正在寻找的是如下所示:

注意 :

下面的代码完全属于我的想象,并没有这样的东西存在.

model = model.Where(x => x.GetPropertyByName(searchField) == searchTerm);
Run Code Online (Sandbox Code Playgroud)

我是否在这里飞得太高如果不可能或完全白痴,如果已经有内置的方式吗?