获取任何EntityType对象的表数据,因为DataGrid可以显示它的列和数据

本文关键字:数据 显示 DataGrid EntityType 任何 对象 获取 因为 | 更新日期: 2023-09-27 18:16:50

我在我的WPF程序中有一个这样的方法:

void ShowTableInDataGrid(EntityType myEntityType)
{
    var tableName = myEntityType.Name;
    var result = _context.Database.
                 SqlQuery<dynamic>("SELECT * FROM dbo." + tableName).ToList();
    DataGridMain.ItemsSource = result;
}

通过EntityFramework从数据库中加载TableName的数据,而不显示DataGridMain控制的任何数据。DataGridMain根据分配给ItemsSource的实体类信息自动创建列

现在,例如如果我将dynamic更改为Customer:

SqlQuery<Customer>("SELECT * FROM dbo." + tableName).ToList();

TableNameCustomer,那么DataGridMain显示列和数据非常好

但是我有超过100个不同的表,我不知道哪个表信息将在设计时传递给ShowTableInDataGrid方法,然后我应该写超过100个案例(EF中每个表一个案例)来处理这个问题,像这样:

void ShowTableInDataGrid(EntityType myEntityType)
{
    var tableName = myEntityType.Name;
    //....
    switch (selectedEntity.Name)
    {
        case "Customer":
        {
            result = _db.Database.SqlQuery<Customer>("SELECT * FROM dbo." + selectedEntity.Name).ToList();
                break;
        }
        case "Book":
        {
            result = _db.Database.SqlQuery<Book>("SELECT * FROM dbo." + selectedEntity.Name).ToList();
                break;
        }
        .
        .
        .
        . // OVER 100 CASE !!!
        .
        .
        .
        default:
        {
            MessageBox.Show("New Case Needed!");
            break;
        }
    }
    DataGridMain.ItemsSource = result;
}

我的问题是

有没有办法防止这种开关情况??我认为这种方式是硬代码,非常静态。我讨厌这样……


这个作品的基础:我想在我的Comobox中显示EF表,并在DataGrid中显示它,当我从Combobox中选择一个表时。目前我的Combobox工作良好,DataGrid是问题。

获取任何EntityType对象的表数据,因为DataGrid可以显示它的列和数据

试试这个,它似乎没有抱怨它,但没有完整的设置来测试它。

void ShowTableInDataGrid(System.Data.Entity.Core.Metadata.Edm.EntityType myEntityType) {
        var tableName = myEntityType.GetType();
        var result = _context.Database.
                     SqlQuery<myEntityType.GetType()> ("SELECT * FROM dbo." + tableName).ToList();
        DataGridMain.ItemsSource = result;
    }