C# 要列出的实体框架通用数据库集

C# 要列出的实体框架通用数据库集,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,我尝试将genericDbSet绑定到Combobox,如下所示: public static void BindComboboxByEntity(ComboBox combo, Type type, string displayMember, string valueMember, string orderBy) { if (combo is ComboBox) using (var db = new MyDbContext()) {

我尝试将generic
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
。如何执行此操作?

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

注意:您将需要


使用System.Linq

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

注意:您将需要


使用System.Linq

如果您正在传递
类型
,请尝试以下操作

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);
        }

}
public static void bindcomboxbyentity(组合框组合、字符串displayMember、字符串valueMember、字符串orderBy),其中T:class
{
如果(组合框是组合框)
使用(var db=new MyDbContext())
{
combo.ValueMember=ValueMember;
combo.DisplayMember=DisplayMember;
combo.DataSource=db.Set().OrderBy(OrderBy);
}
}
然后将其作为

BindComboboxByEntity<MyEntity>(MyCombo, "name", "id", "name");
bindcomboxbyentity(MyCombo,“name”、“id”、“name”);

如果您正在传递
类型
,请尝试此操作

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);
        }

}
public static void bindcomboxbyentity(组合框组合、字符串displayMember、字符串valueMember、字符串orderBy),其中T:class
{
如果(组合框是组合框)
使用(var db=new MyDbContext())
{
combo.ValueMember=ValueMember;
combo.DisplayMember=DisplayMember;
combo.DataSource=db.Set().OrderBy(OrderBy);
}
}
然后将其作为

BindComboboxByEntity<MyEntity>(MyCombo, "name", "id", "name");
bindcomboxbyentity(MyCombo,“name”、“id”、“name”);

如果是这么简单的话……我有一个错误CS1061:尽管:Owww刚刚注意到您的代码不是泛型的。是否可以将类似于
bindcomboxbyentity
isntead的内容作为参数传递
Type
?然后您可以编写一些通用的东西,比如dbSet,它将正确地获取所有类型。顺便说一下,最好有一个中间层,这样您的combobox UI代码就不会直接包含到数据库的代码。通常,EF是通过“存储库模式”完成的。这有助于解决此类问题。如果是这么简单的话…我有一个错误CS1061:虽然:Owww刚刚注意到您的代码不是泛型的。是否可以将类似于
bindcomboxbyentity
isntead的内容作为参数传递
Type
?然后您可以编写一些通用的东西,比如dbSet,它将正确地获取所有类型。顺便说一下,最好有一个中间层,这样您的combobox UI代码就不会直接包含到数据库的代码。通常,EF是通过“存储库模式”完成的。这有助于解决此类问题。添加了一个答案添加了一个答案谢谢!这正是我需要的@VladiSlav不用担心,你用的是哪一部分?第二部分是通过泛型实体。谢谢!这正是我需要的@VladiSlav不用担心,你用的是哪一部分?第二部分是传递泛型实体。