例如,我有主题表:生物学,化学和物理,每个都有列className(以及其他列)。我想遍历表格,得到名称,然后获取该列下的内容,因为我需要ToList()
。
我想做这样的事情:
for each (table in myEntityModel)
{
Get tableName from table
Get contents under className from table
}
我尝试过使用metadataworkspace,我得到了一个tableName列表,但这对我获取每个表的内容没有多大帮助。我能够查询单个表,但我不知道如何更改表。如果我使用:来自myEntity.Biology中的r选择{...},我无法更改我所指的实体集。
哦,如果我正在做的事情的上下文有帮助,我正在尝试使用Visual Studio 2015中的Ajax Control Toolkit 16.1构建手风琴。我正在使用Entity Framework 6.0。主题名称将成为headercontainer,类列表将作为gridview添加到accordion窗格中。我是C#,Visual Studios,数据库,查询,实体模型以及我正在使用的几乎所有内容的新手,但可以随意使用您喜欢的术语。如果有什么东西让我困惑,我会谷歌。谢谢!
答案 0 :(得分:4)
效率不高,因为它会将整个表加载到内存中,但您可以这样做:
var myEntityModel = new MyEntityModel(); //your context
var dbSets = myEntityModel.GetType().GetProperties().Where(p => p.PropertyType.Name.StartsWith("DbSet")); //get Dbset<T>
foreach (var dbSetProps in dbSets)
{
var dbSet = dbSetProps.GetValue(myEntityModel, null);
var dbSetType = dbSet.GetType().GetGenericArguments().First();
var classNameProp = dbSetType.GetProperty("className");// i did not undestand, you want classes with className property?
if (classNameProp != null)
{
var contents = ((IEnumerable) dbSet).Cast<object>().ToArray();//Get The Contents of table
}