【发布时间】:2011-12-05 07:39:42
【问题描述】:
假设我有以下课程:
public class Person {
public string FirstName { get; set; }
public string SurName { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
}
另外,我有以下方法,我正在通过存储库获取个人数据。
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;
}
如您所见,我得到了该方法的两个参数:searchField 和 searchTerm。
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;
}
这会很好用。但是,如果我对我的类进行更改,那么如果我在这个类中添加新属性,这段代码就会发生改变或缺少某些功能。
我正在寻找如下内容:
注意:
下面这段代码完全属于我的想象,没有这样的 东西是存在的。
model = model.Where(x => x.GetPropertyByName(searchField) == searchTerm);
如果这是不可能的,我是不是飞得太高了,如果已经有内置的方法,我是完全白痴吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc linq entity-framework