2013-08-29 2 views
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 и разрешении но не может получить значения столбца в colvalue. У него есть определенные строки, но значение равно null, то есть оно не может присвоить значение из res.

Что я делаю неправильно? Есть ли подходящий метод для этого? Пожалуйста, помогите!

ответ

1

Попробуйте это, вместо строки используйте вызов 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); 
       }); 
    } 
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.