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 で列の値を取得できません。特定の行がありますが、値はnullです。つまり、resから値を割り当てることができません。

私は何を間違っていますか?それを行うための適切な方法はありますか?助けてください!

4

2 に答える 2

1

これを試してみてください。7行目の代わりにEntity 呼び出しを使用すると、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);

colvalue を割り当てるために GetValue でデータを渡していませんでした。

于 2013-08-29T10:56:11.087 に答える