foreach(其中x => x.PROPERTY),如何设置PROPERTY?

时间:2014-05-09 18:07:21

标签: c# reflection lambda propertyinfo

我有一个对象学生,我通过以下方法获得了一个属性的值

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读作学生的实际值,或者其他什么方法对我有用?

谢谢

2 个答案:

答案 0 :(得分:4)

由于propValuePropertyInfo对象,您需要使用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")
    {
        ....
    }
}

如果您想:

,可以重写为LINQ
var matchingStudents =
    from stu in formStudents
    let propertyValue = (string)propValue.GetValue(stu)
    where propertyValue == "John";
    select stu;
foreach (var student in matchingStudents)
    ...