繁体   English   中英

实体框架DBSet作为组合框/列表数据源

[英]Entity Framework DBSet as combobox/list datasource

对于一个小问题,我需要一些拼命的帮助,对于那些在Entity Framework方面拥有多年经验的经验丰富的程序员来说,这很容易。 这是我第一次使用EF。 我有一组组合框,需要在Form_Load事件上填写。 为了重构和避免代码冗余,我制作了一个函数,所有组合调用该函数传递必要的参数以使其填充,如下所示:

    private void FormEntities_Load(object sender, EventArgs e)
    {
        //string query = "Select Id, Name from Table_Name";
        FillCombo(cboCountry, "Select Id, Name from Country", "Name", "Id");
        FillCombo(cboCategory, "Select Id, Name from Category", "Name", "Id");

    }

    public void FillCombo(ComboBox combo, string query, string displayMember, string valueMember)
    {
        sqlCmd = new SqlCommand(query, sqlConStr);
        sqlDa = new SqlDataAdapter(sqlCmd);
        dt = new DataTable();
        sqlDa.Fill(dt);
        combo.DataSource = dt;
        combo.DisplayMember = displayMember;
        combo.ValueMember = valueMember;
        combo.Selected.Index = -1;
    }

由于我现在使用的是EF,因此我打算使用相同的功能来填充组合框,但是这次使用EF实体作为数据源,如下所示。 问题是,我不知道应该为访问DBSet集合的函数中的第二个参数定义哪个类/类型。 我已经尝试了下面的代码,但它无法正常工作。 当我调用该函数时,编译器将引发错误,提示我传递了一些无效的参数。 我在这里做错了什么?

    private void FormEntities_Load(object sender, EventArgs e)
    {
    SystemDBContext ctxt = new SystemDBContext ();

        FillCombo(cboCountry, ctxt.CountryEntity, "Name", "Id");
        FillCombo(cboCategory, ctxt.CategoryEntity, "Name", "Id");
    }

    public void FillCombo(MetroFramework.Controls.MetroComboBox combo, DbSet datasource, string displayMember, string valueMember)
    {
        combo.DataSource = datasource.ToList();
        combo.DisplayMember = displayMember;
        combo.ValueMember = valueMember;
        combo.SelectedIndex = -1;
    }

提前致谢!

DbSet类没有ToList方法或扩展方法,您应该创建通用方法来解决此问题:

public void FillCombo<T>(... , List<T> datasource, ...) where T:class
{
    combo.DataSource = datasource;
    ...
}

然后,当您将List<Category>传递给方法时,将确定T的类型,该类型将为Category并且对于List<Country>相同。

以下是调用该方法的一些示例:

FillCombo(..., context.Categories.ToList(), ...);
FillCombo(..., context.State.Where(st => st.CountryId.Trim() == id).ToList(), ...);   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM