我有一个对象学生,我通过以下方法获得了一个属性的值
System.Reflection.PropertyInfo propValue = typeof(Student).GetProperty(s);
让我们说 s (我传入GetProperty的字符串)是名为" StudentName"的属性。然后我想基于该属性运行搜索,该属性存储在propValue中,例如:
foreach (Student stu in formStudents.Where(x => x.propValue == "John"))
但是这不起作用,因为x .__只填充了Student的属性(即使valueProp包含Student的有效属性)。
我如何覆盖它,以便将propValue读作学生的实际值,或者其他什么方法对我有用?
谢谢
答案 0 :(得分:4)
由于propValue
是PropertyInfo
对象,您需要使用GetValue
方法
foreach (Student stu in formStudents.Where(x => ((string)propValue.GetValue(x, null)) == "John"))
但是,从问题描述中,您可以通过查看Dynamic Linq库(也可在NuGet上找到)来让您的生活更轻松:
using System.Linq.Dynamic;
...
foreach (Student stu in formStudents.Where("StudentName = @0", "John"))
答案 1 :(得分:1)
您调用从.GetValue(...)
返回的PropertyInfo
对象的.GetProperty(s)
方法:
foreach (Student stu in formStudents)
{
var value = (string)propValue.GetValue(stu);
if (value == "John")
{
....
}
}
如果您想:
,可以重写为LINQvar matchingStudents =
from stu in formStudents
let propertyValue = (string)propValue.GetValue(stu)
where propertyValue == "John";
select stu;
foreach (var student in matchingStudents)
...