2013-08-15 3 views
3

У меня есть таблица в базе данных MSSQL с ~ 300 столбцами, и я хочу извлечь только одну строку и получить все значения столбцов. Я использовал этот код, но у меня проблемы с методом GetValue(,). Это мой код: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

Я думаю, что вы забыли один "после CC –

ответ

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 теперь возвращает ссылку на соответствующее лицо - и затем вы запрашиваете дескрипторы свойств, и попросить каждый дескриптор для значения, что свойство на этом объекте.

Смежные вопросы