C#:当属性标识符被称为字符串时,访问类属性

C#:当属性标识符被称为字符串时,访问类属性,c#,linq,string,linq-to-entities,properties,C#,Linq,String,Linq To Entities,Properties,我正在使用LINQ来访问数据库中的实体,该数据库的结构事先是未知的。我使用反射来检索信息,现在有了一个包含所有表名的字符串列表。因为我使用LINQ,所以我还将数据源封装在一个C#类(linqContext)中,每个表都是该类的一个属性 我想要实现的是: 假设表名列表中的一个字符串是“Employees”。这在代码中是已知的,我想执行以下操作: linqContext.Employees.DoSomethingHere(); 这可能吗?我知道,如果所有属性都只是列表中的项目,我可以使用字符串作为

我正在使用LINQ来访问数据库中的实体,该数据库的结构事先是未知的。我使用反射来检索信息,现在有了一个包含所有表名的字符串列表。因为我使用LINQ,所以我还将数据源封装在一个C#类(linqContext)中,每个表都是该类的一个属性

我想要实现的是: 假设表名列表中的一个字符串是“Employees”。这在代码中是已知的,我想执行以下操作:

linqContext.Employees.DoSomethingHere();

这可能吗?我知道,如果所有属性都只是列表中的项目,我可以使用字符串作为索引器,
linqContext[“Employees”]
。但是,情况并非如此:(

使用反射来检索DataContext的命名属性,或者检索实体类型,然后调用DataContext.GetTable(类型)。

使用反射来检索DataContext的命名属性,或者检索实体类型,然后调用DataContext.GetTable(类型).

首先,我不会使用反射来获取此信息,我会使用ObjectContext的MetadataWorkspace属性,因为它已经有了此信息。类似于以下内容:

EntityContainer container = context.MetadataWorkspace
    .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
var setNames = container.BaseEntitySets.Select(b =>b.Name);
获得集合名称后,您可以按如下方式从特定集合获取数据:

context.CreateQuery<T>("[" + entitySetName + "]");
context.CreateQuery(“[”+entitySetName+“]);

我使用的通用存储库实际上是在容器中搜索与给定类型匹配的实体集,以便调用代码只需传入类型并返回相应的集合。

首先,我不会使用反射来获取此信息,我会使用ObjectContext的MetadataWorkspace属性,因为它已经具有信息,比如:

EntityContainer container = context.MetadataWorkspace
    .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
var setNames = container.BaseEntitySets.Select(b =>b.Name);
获得集合名称后,您可以按如下方式从特定集合获取数据:

context.CreateQuery<T>("[" + entitySetName + "]");
context.CreateQuery(“[”+entitySetName+“]);

我使用的泛型存储库实际上在容器中搜索与给定类型匹配的实体集,以便调用代码只需传入类型并返回相应的集合。

您可以尝试通过反射找到所需的实体类型,然后使用DataContext类的GetTable方法。您可以尝试查找通过反射删除实体类型,然后使用DataContext类的GetTable方法。