实体框架通用DbSet列出

时间:2019-10-17 08:15:44

标签: c# .net entity-framework linq

我尝试像这样将通用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 个答案:

答案 0 :(得分:3)

请注意,IQueryable仍表示(通常)尚未执行的“查询”。您需要实际实现查询(例如,使用ToList())

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

注意:您将需要

using System.Linq;

答案 1 :(得分:2)

如果您通过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");