3

我在 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.
4

1 回答 1

3

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

因此,您的result.First()调用返回对对象的引用-并且您希望获取该对象的属性...所以这应该是您传递给的引用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);
  }
}

所以GetValuesDB现在返回对相关实体的引用 -然后您获取属性描述符,并询问每个描述符该对象上该属性的值。

于 2013-08-15T13:10:23.387 回答