0

3番目のソースからインポートされた数百のテーブルを含むデータベースがあります。エンティティフレームワークを使用すると、これらのテーブルはE_1、E_2、E_3 ...というラベルの付いたObjectSetになります。すべてのテーブルには共通の列セットがあり、1つの関数でクエリを実行できます。

私は次のコードを持っています:

namespace Foo{
    public static class Data{

       public static MyEntities dataContext = new MyEntities();

       public static void getData<T>(string entityName) where T : class
       {
          string queryString = "SELECT result FROM ";
          queryString += Data.dataContext.DefaultContainerName + "." + entityName;

          ObjectQuery<T> myQuery = Data.dataContext.CreateQuery<T>(queryString, null);

        // do stuff
       }

       public static void test(){
         string entityName = "E_1";
         Data.getData<E_1>(entityName);
       }
}

test()では、文字列 "E_1"を関数getData()に渡し、ジェネリック型パラメーターとして型クラスFoo.E_1をgetData<>に挿入します。

実際には、E_1は実行時までわかりません。実行時にentityName文字列を作成しますが、この文字列をgetData <>に必要なジェネリックパラメータータイプに変換するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

すべてのテーブルには、共通の列セットがあります

したがって、1つのクラス(MyImportTypeなど)を作成してクエリの結果をキャプチャしExecuteStoreQuery、代わりに使用することができますObjectQuery

var data = Data.dataContext.ExecuteStoreQuery<MyImportType>(queryString);

また、getDataはジェネリック型パラメーターを必要としません。

余談ですが、データベースの設計が非常に悪いというTomTomに同意します。可能であれば、少なくとも同じ列のテーブルを1つのテーブルにマージします。

于 2012-06-25T09:54:14.200 に答える
-1

実際には、E_1は実行時まで知られていません

実際のAnjdは次のとおりです。

  • 非常に悪いデータベース設計と
  • SOmethingはEntityFrameworkではサポートされていません。

そのように単純です。

于 2012-06-25T04:51:53.573 に答える