属性的GetValue

时间:2013-08-15 13:07:53

标签: c# sql-server properties

我在MSSQL数据库中有一个包含约300列的表,我想只提取一行并获取列的所有值。我已经使用过这段代码,但我遇到了GetValue(,)方法的问题。这是我的代码:

private PropertyInfo[] GetValuesDB()
{
   ......
   var result = from val in datacTx.TableA
                where val.A == "AA" + "-" + "11" &&
                      val.B == "CC                   
                select val;
   return result.First().GetType().GetProperties();
}

...
public void MethodA()
{
  var res = GetValuesDB();
  foreach (var propertyInfo in res)
  {
    var rez = propertyInfo.GetValue(res,null);
  }
}

我总是得到这种例外:

Object does not match target type.

1 个答案:

答案 0 :(得分:3)

GetValue期望第一个参数的类型是声明属性(或子类型)的类型。

因此,您的result.First()调用会返回对象的引用 - 并且您希望获取该对象上的属性 ...因此应该是您传递给{{1 }}。您需要更改代码以返回该引用:

GetValue

所以// Ideally, change this to a more appropriate return type... private object GetValuesDB() { ...... var result = from val in datacTx.TableA where val.A == "AA" + "-" + "11" && val.B == "CC" select val; return result.First(); } ... public void MethodA() { var res = GetValuesDB(); foreach (var propertyInfo in res.GetType().GetProperties()) { var rez = propertyInfo.GetValue(res, null); } } 现在返回对相关实体的引用 - 然后然后获取属性描述符,并向每个描述符询问该对象上该属性的值< / em>的