我的WPF
程序中有这样的方法:
void ShowTableInDataGrid(EntityType myEntityType)
{
var tableName = myEntityType.Name;
var result = _context.Database.
SqlQuery<dynamic>("SELECT * FROM dbo." + tableName).ToList();
DataGridMain.ItemsSource = result;
}
它通过TableName
在EntityFramework
上加载数据库中的数据,但不会在DataGridMain
控件中显示任何数据。 DataGridMain
根据指定为ItemsSource
列表的实体类信息自动创建列。
现在例如如果我将dynamic
更改为Customer
:
SqlQuery<Customer>("SELECT * FROM dbo." + tableName).ToList();
TableName
为Customer
,然后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;
}
我的问题是:
有没有办法防止这种切换案例???我认为这种方式是硬编码而且非常静态。我讨厌这种方式..
此工作的基础:当我从EF
中选择一个表时,我希望在Comobox
中显示DataGrid
个表并在Combobox
中显示它。目前我的Combobox
效果很好,DataGrid
就是问题所在。
答案 0 :(得分:0)
尝试这一点,它似乎没有抱怨它,但没有完整的设置来测试它。
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;
}