0

我正在动态传递列名并尝试从数据库中获取该列的值这里是代码

public ActionResult GetValue(string colname)
{
     var obj= Activator.CreateInstance(Assembly.GetExecutingAssembly().GetType("Demo.Models.DEMOTABLE");
     var res = MvcApplication.dbm.Set<DEMOTABLE>().SqlQuery("Select * from DEMOTABLE");
     var colvalue = from e in res select e.GetType().GetProperty(colname).GetValue(obj,null);

      return View(colvalue);
}

我在 obj 和 res 中获得了正确的值,但无法在 colvalue 中获得列值。它具有特定的行,但值为空,即它无法从 res 中分配值。

我究竟做错了什么?有没有合适的方法来做到这一点?请帮忙!

4

2 回答 2

1

试试这个,而不是第7行,使用实体调用,genericChildObjects 将保存从数据库中检索的列值。

    private void GetValue(string columnName)
    {
        var aClassType = Assembly.GetExecutingAssembly().GetType("ConsoleApplication8.A");
        Type list = typeof(List<>).MakeGenericType(new[] { aClassType });
        var genericChildObjects = (IList)Activator.CreateInstance(list);

        var res = new List<B> { new B() { TestData = "Test Data From Calss B" } };

        res.ForEach(
            r =>
                {
                    var aClassObject = Activator.CreateInstance(aClassType);
                    aClassType.GetProperty(columnName)
                              .SetValue(aClassObject, r.GetType().GetProperty(columnName).GetValue(r));
                    genericChildObjects.Add(aClassObject);
                });
    }
于 2013-08-29T08:46:31.840 回答
0

我在代码中犯了一个错误,我找到了解决方案

代替

var colvalue = from e in res select e.GetType().GetProperty(colname).GetValue(obj,null);

我改成

var colvalue = from e in res select obj.GetType().GetProperty(colname).GetValue(e, null);

我没有在 GetValue 中传递数据来分配 colvalue。

于 2013-08-29T10:56:11.087 回答