【发布时间】:2017-05-18 15:49:16
【问题描述】:
我想通过属性名称过滤一个类的集合作为一个字符串。假设我有一个名为 Person 的类,我有一个它的集合,IEnumerable 或 List,我想过滤这个集合,但我不知道确切的过滤器,我的意思是我不能使用:
person.Where(x => x.Id == 1);
让我举个例子。
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int YearOfBorn {get; set;}
}
现在我创建了一个像这样的集合:
List<Person> p = new List<Person>();
现在我想过滤所有叫 Alex 的人,但我想用这个函数过滤:
public List<Person> Filter(string propertyName, string filterValue, List<Person> persons)
如果我想使用 Linq 或 Lambda,我该如何过滤它?
谢谢
【问题讨论】:
-
为什么不能使用
Where? -
您是要我们为您编写整个代码吗?
-
我知道我可以使用 Func 来做到这一点,但我不知道怎么做?而且我知道我必须以某种方式找到属性的类型,但当它是类列表时,我也不知道如何。
-
如果你想拥有一个像你描述的那样的方法,就像传递属性和属性值的参数一样,你必须使用反射。但你为什么要这样做?您是否正在尝试将 SQL 查询转换为 linq 之类的操作?
-
this answer 也应该有帮助。