Entity Framework универсальный DbSet для списка - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь привязать общий DbSet к Combobox следующим образом:

public static void BindComboboxByEntity(ComboBox combo, Type type, string displayMember, string valueMember, string orderBy)
{
    if (combo is ComboBox)
        using (var db = new MyDbContext())
        {
            combo.ValueMember = valueMember;
            combo.DisplayMember = displayMember;
            combo.DataSource = db.Set(type).OrderBy(orderBy);
        }
    }

Вызов:

BindComboboxByEntity(MyCombo, typeof(MyEntity), "name", "id", "name");

Но я знаю, что мне нужно конвертировать IQueryable к List для привязки данных к Combobox. Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 17 октября 2019

Обратите внимание, что IQueryable по-прежнему представляет «запрос», который (в общем) не был выполнен. Вам нужно на самом деле материализовать запрос (например, с помощью ToList ())

combo.DataSource = db.Set(type).OrderBy(orderBy).ToList();

Примечание: вам понадобится

using System.Linq;

2 голосов
/ 17 октября 2019

если вы передаете Type type, попробуйте это

var result = db.Set(type).OrderBy(orderByString).ToListAsync();
combo.DataSource = result.Result;

, но я бы предложил передать универсальный класс / сущность

public static void BindComboboxByEntity<T>(ComboBox combo, string displayMember, string valueMember, string orderBy) where T : class
{
   if (combo is ComboBox)
        using (var db = new MyDbContext())
        {
            combo.ValueMember = valueMember;
            combo.DisplayMember = displayMember;
            combo.DataSource = db.Set<T>().OrderBy(orderBy);
        }

}

, затем передать его как

BindComboboxByEntity<MyEntity>(MyCombo, "name", "id", "name");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...