我有一个包含从第三个源导入的数百个表的数据库。使用实体框架,这些表成为标记为E_1,E_2,E_3的ObjectSets ...所有表都有一组共同的列,可以使用一个函数进行查询。
我有以下代码:
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&lt;&gt;中。作为泛型类型参数。
实际上,E_1直到运行时才知道。在运行时,我创建了entityName字符串,但是如何将此字符串转换为getData&lt;&gt;所需的泛型参数类型?
感谢。
答案 0 :(得分:0)
实际上,E_1在运行时才知道
现实中的Anjd是:
很简单。
答案 1 :(得分:0)
所有表格都有一组共同的列
因此,您可以创建一个类(例如MyImportType)来捕获查询结果,并使用ExecuteStoreQuery
代替ObjectQuery
var data = Data.dataContext.ExecuteStoreQuery<MyImportType>(queryString);
getData不需要泛型类型参数。
除此之外:我同意TomTom的数据库设计非常糟糕。如果可以,至少将具有相同列的表合并到一个表中。