循环实体框架6中的表

时间:2016-03-24 03:31:52

标签: c# entity-framework visual-studio-2015 entity-framework-6 ajaxcontroltoolkit

抱歉这个简单的问题。我是新来的。我有一个包含多个表的实体模型,我想得到一个表的列表,然后我想从表中获取列的内容。

例如,我有主题表:生物学,化学和物理,每个都有列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,数据库,查询,实体模型以及我正在使用的几乎所有内容的新手,但可以随意使用您喜欢的术语。如果有什么东西让我困惑,我会谷歌。谢谢!

1 个答案:

答案 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
     }