2013-10-11 2 views
4

Я новичок в Reflection, и после трех дней поиска я не смог получить результат. Я был бы признателен за помощь.C# Refinding binding result Linq2Sql to list

То, что я пытаюсь сделать, - связать результат со списком.

У меня есть класс:

public class DropdownList 
{ 
    public string ID { get; set; } 
    public string Description { get; set; } 
} 

У меня есть функция:

public static List<DropdownList> getDropdownList(string Method) 
{ 
    using (var Context = new WebDataContext()) 
    { 
     var method = Context.GetType().GetMethod(Method); 
     if (method == null) throw new InvalidOperationException("Defined DataContext does not have method" + Method); 

     var result = method.Invoke(Context,null); 

     var toReturn = (from x in result select new DropdownList { ID = x.???, Description = x.??? }).ToList(); 

     return toReturn; 
    } 
} 

Я связываю это с комбобоксом:

StatuscomboBoxProperties.DataSource = getDropdownList("Get_SupplierList"); 

"Результат"

в toReturn дать следующая ошибка:

could not find an implementation of the query pattern for source type "system.Reflection.MethodInfo' "Select" not found 

Мой вопрос: если вы наведите указатель мыши на результат, появится Result View, и я смогу увидеть данные, возвращаемые методом, но как я привяжу свой список к этим данным.

+1

'Invoke' возвращает' object'. Поэтому результатом является «объект». Вы должны знать общий базовый тип (или интерфейс) и выдавать ему результат 'method.Invoke'. Я также думаю, что вы должны найти другой способ сделать это, потому что использование отражения не подходит в вашем случае. –

+1

Нет, вы не хотите использовать Reflection здесь. Если вы подходите к альтернативному решению, дайте мне знать, и я подниму демоверсию, используя делегатов. –

+0

Любое альтернативное решение. Очень важно передать метод в виде строки, поскольку я создал структуру, которая управляет внешним видом и сетью моих сеток (devexpress) с автономного исполняемого файла. Это мой последний шаг, чтобы связать выпадающие списки с полями в сетке, где это необходимо. –

ответ

0

Я изменил свой подход, и мое приложение отлично работает. Любые комментарии или советы по моему новому подходу будут оценены.

Я держал класс:

public class DropdownList 
{ 
    public int ID { get; set; } 
    public string Description { get; set; } 
} 

Я изменил свою функцию:

public static List<DropdownList> getDropdownList(string Method) 
{ 
    using (var Context = new WebDataContext()) 
    { 
     var toReturn = Context.ExecuteQuery<DropdownList>("EXEC " + Method).ToList(); 
     return toReturn; 
    } 
} 

Я связываю это с комбобоксом:

StatuscomboBoxProperties.DataSource = getDropdownList("Get_SupplierList"); 

"Get_SupplierList" передается в с помощью combobox.