Joh*_*ews 6 c# entity-framework
我正在使用Entity Framework开发一个应用程序.我有一个组合框,其中包含数据库中表的名称.我有以下代码:
string table = cbTables.SelectedItem.ToString();
using (var dbContext = new Entities()) {
if (table.Equals("Person")) {
List<Person> list = (from l in dbContext.People select l).ToList();
} else if (table.Equals("Student")) {
List<Student> list = (from u in dbContext.Student select u).ToList();
} else if (table.Equals("Grade")) {
List<Grade> list = (from p in dbContext.Grade select p).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我怎么能避免所有这些if-else检查?是否可以从包含该名称的字符串中获取类的名称?
例:
string = "Person";
var str = //something
List<str> list = (from u in dbContext.str select u).ToList();
Run Code Online (Sandbox Code Playgroud)
ComboBox能够通过数据源显示字典,因此您可以将显示文本与您实际想要的数据绑定,而不用检查显示文本。然后在这种情况下,我们将它绑定到实体的类型:
Dictionary<string,Type> typeMap = new Dictionary<string,Type> {
{ "Person", typeof(Person) },
{ "Student", typeof(Student) },
{ "Grade", typeof(Grade) },
}
Run Code Online (Sandbox Code Playgroud)
然后将其绑定为ComboBox:
cbTables.DataSource = new BindingSource(typeMap, null);
cbTables.DisplayMember = "Key";
cbTables.ValueMember = "Value";
Run Code Online (Sandbox Code Playgroud)
然后,当您需要获取选定的实体时,请使用
Type entityType = (Type) cbTables.SelectedValue;
DbSet set = dbContext.Set(entityType);
Run Code Online (Sandbox Code Playgroud)
但是,此后您需要entityType相应地检查并显示表单。如果您的表单需要列表,例如列表,则使用
List<Student> studentList = set.Cast<Student>.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |