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

时间:2010-05-19 11:17:01

标签: c# linq string linq-to-entities properties

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

我想要达到的目的是: 假设表名列表中的一个字符串是“Employees”。这在代码中是已知的,我想做以下事情:

linqContext.Employees.DoSomethingHere();

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

3 个答案:

答案 0 :(得分:2)

首先,我不会使用反射来获取此信息,我将使用ObjectContext的MetadataWorkspace属性,因为这已经有了信息。像这样:

EntityContainer container = context.MetadataWorkspace
    .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
var setNames = container.BaseEntitySets.Select(b =>b.Name);

获得设置名称后,您可以按如下方式从特定集中获取数据:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)