5

文字列クラス名に基づいてデータベースに動的にクエリを実行できるようにするコードの作成を検討しています。

私がここで欲しいものの簡単な概要:

私のコンテキスト:

public class MyContext : DbContext
{
    public DbSet<Foo> Foos {get;set;}
    public DbSet<Bar> Bars {get;set;}
}

私が持っているセットアップでは、基本的なことを行うことでこのコンテキストをクエリします。基本的context.Foos.Where(...) に同じことをしたいと思いますが、コンパイル時にその部分を知る必要はなく、.Foos実行時に行いたいと思います。

論理的に私が望むのは次のとおりです。

var results = context."ClassName".Where(...)

私は次のような一般的な方法でこれをやろうとしました:

//method in context
public IEnumerable<T> GetGenericData<T>() where T : Type
{
    return context.Set<T>();
}

//call in repo
context.GetGenericData<Type.GetType("Foo")>();

ここで正しい道を進んでいるかどうかはわかりません。理想的には、SQL ルートを下る必要がないことを意味するソリューションを取得したい

編集:これにさらに取り組んでおり、この時点に到達しました。

//method in context
public DbSet GetGenericData(Type _type)
{
    return context.Set(_type);
}

//calling like
var data = context.GetGenericData(myType);

問題は、これvar dataが DbSet であることです。これを、実行時に定義される Type のリストに変換できる必要があります。単純にできないので、これを行う簡単な解決策はありますかvar data = context.GetGenericData(myType).toList()

Edit2:問題にさらにコンテキストを追加するために、たとえば、ファイルからデータベーステーブルのリストを読み取り、これらのテーブルのデータを取得して、これを XML ファイルにシリアル化するコードを作成することを検討しています。

基本的に、次のようなファイルがあります。

Foo
Bar
MoreStuff

これが読み取られ、Foo テーブル内のすべてのデータが Foo.xml という xml ファイルにエクスポートされます。逆に、xml ファイルからデータを読み取り、データベースにインポートする必要もあります。

4

2 に答える 2