gpt4 book ai didi

c# - 避免大量 if - else 检查 - 使用 Entity Framework 从字符串中选择表

转载 作者:太空狗 更新时间:2023-10-29 21:45:14 25 4
gpt4 key购买 nike

我正在使用 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();
}

我怎样才能避免所有这些 if-else 检查?是否可以从包含名称的字符串中获取类的名称?

例子:

string = "Person";
var str = //something
List<str> list = (from u in dbContext.str select u).ToList();

最佳答案

ComboBox 可以通过数据源显示字典,因此您可以将显示文本与您实际需要的数据绑定(bind),而不用检查显示文本。那么在这种情况下,我们会将其绑定(bind)到实体的类型:

Dictionary<string,Type> typeMap = new Dictionary<string,Type> {
{ "Person", typeof(Person) },
{ "Student", typeof(Student) },
{ "Grade", typeof(Grade) },
}

然后将其绑定(bind)到 ComboBox,例如:

cbTables.DataSource = new BindingSource(typeMap, null);
cbTables.DisplayMember = "Key";
cbTables.ValueMember = "Value";

然后,当您需要获取选定的实体时,使用

Type entityType = (Type) cbTables.SelectedValue;
DbSet set = dbContext.Set(entityType);

但是,在此之后您需要检查 entityType 并相应地显示表单。如果您的表单需要列表,例如列出,然后使用

List<Student> studentList = set.Cast<Student>.ToList();

关于c# - 避免大量 if - else 检查 - 使用 Entity Framework 从字符串中选择表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17009302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com