使用字符串确定要查询的表

时间:2013-01-15 22:00:31

标签: c# wpf visual-studio entity-framework

我正在尝试使用字符串来确定我正在执行查询的表。但是我找不到任何方法来做到这一点。这是我的代码:

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的视频时,我正在考虑尝试将其添加到此程序中。

2 个答案:

答案 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;

如果您愿意,可以使用它,但是,我非常怀疑(我认为很多人也会同意我的观点)这是一件好事。请提供一些关于你想要实现的目标的更多背景知识,因为很可能有更好的方法来做到这一点,而不必诉诸“魔术串”。