0

文字列を使用して、クエリを実行しているテーブルを特定しようとしています。しかし、私はこれを行う方法を見つけることができません。これが私のコードです:

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でビデオを見ているので、試してみて、このプログラムに追加することを考えています。

4

2 に答える 2

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;

すべての助けに対してコメント/回答し、私を良い方向に向けてくれたすべての人に感謝します。

于 2013-01-17T13:51:41.130 に答える
0

私のバージョン(.Net 4.0)のSystem.Data.Objects.ObjectContextクラスには、次のパブリックメソッドが含まれています。

public ObjectSet<TEntity> CreateObjectSet<TEntity>(string entitySetName) where TEntity : class;

必要に応じてそれを使用することもできますが、これが良いことであるかどうかは非常に疑わしいです(そして多くの人が私にも同意すると思います)。「マジックストリング」に頼る必要なしにそれを行うためのはるかに良い方法がある可能性が高いので、あなたが達成しようとしていることについてもう少し背景を教えてください。

于 2013-01-15T22:23:26.300 に答える