如何按属性的名称调用属性的方法

时间:2014-04-16 07:50:14

标签: c# linq

我想通过反思来调用属性的对象方法。例如,

var query = DataContext().SomeTable.Where(u => u.UserID.contains("P");

我尝试过以下但没有运气:

var query = DataContext().SomeTable.Where(u => u.GetType().GetProperty("UserID").Name.contains("P");

返回null。请帮忙。

2 个答案:

答案 0 :(得分:3)

您必须获取u的值,然后在其上使用ToString

u.GetType().GetProperty("UserID").GetValue(u, null).ToString().Contains("P");

当然它有一点改进:检查GetValue是否不返回null等。

注意:请记住,您可以在某处缓存从PropertyInfo获取的u.GetType().GetProperty("UserID"),这样您就不必每次都调用它。

答案 1 :(得分:3)

您需要GetValue,而不是Name

((string)u.GetType().GetProperty("UserID").GetValue(u) ?? "").Contains("P")

如果ContainsUserID,则?? operator的使用只是确保null不会抛出异常的保障措施。