我正在尝试使用字符串来确定我正在执行查询的表。但是我找不到任何方法来做到这一点。这是我的代码:
ADVENTUREWORKSSUPEREntities context = new ADVENTUREWORKSSUPEREntities();
string table = "Addresses" //this is set elsewhere in the code but I put it here for clarity
if (table == "Addresses")
{
results.ItemsSource = context.Addresses.Where(condition).ToList();
}
else if (table == "Customers")
{
results.ItemsSource = context.Customers.Where(condition).ToList();
}
...
...
...
else if (table == "SalesOrderHeaders")
{
results.ItemsSource = context.SalesOrderHeaders.Where(condition).ToList();
}
是否可以替换
results.ItemsSource = context.Addresses.Where(condition).ToList();
使用我的表字符串而不是地址的行? 因此它将是
results.ItemsSource = context.[table].Where(condition).ToList();
编辑:
我这样做是为了学习wpf / entity framework / C#。当我正在观看关于puralsight的视频时,我正在考虑尝试将其添加到此程序中。
答案 0 :(得分:1)
这是我提出的解决方案。
dynamic test = t.InvokeMember(table,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.GetProperty, null, context, new object[0]);
((IQueryable)test).AsQueryable().Where(condition).Load();
results.ItemsSource = test.Local;
感谢所有评论/回答所有帮助的人,并指出了我的方向。
答案 1 :(得分:0)
System.Data.Objects.ObjectContext
类的我的版本(.Net 4.0)包含以下公共方法:
public ObjectSet<TEntity> CreateObjectSet<TEntity>(string entitySetName) where TEntity : class;
如果您愿意,可以使用它,但是,我非常怀疑(我认为很多人也会同意我的观点)这是一件好事。请提供一些关于你想要实现的目标的更多背景知识,因为很可能有更好的方法来做到这一点,而不必诉诸“魔术串”。