我尝试像这样将通用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
。我该怎么办?
答案 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");