C# 从一对多关系中由多个表组成的模型中获取数据

C# 从一对多关系中由多个表组成的模型中获取数据,c#,asp.net-mvc,entity-framework,ado.net-entity-data-model,C#,Asp.net Mvc,Entity Framework,Ado.net Entity Data Model,我有一个关于asp.NETMVC模型的相对简单的问题 我有一个基于两个表的模型,这两个表以一对多的关系链接 表AnimalGroupID,名称 表AnimalSubGroupID、名称、AnimalGroupID 每个动物群都有任意数量的动物子群 如何遍历每个AnimalGroup的AnimalSubGroup并获取AnimalSubGroup.name作为示例?我是asp.net MVC新手,一直在学习各种教程,但尽管这些教程在设置基本应用程序和从单个表中获取结果方面非常出色,但我仍然无法理解

我有一个关于asp.NETMVC模型的相对简单的问题

我有一个基于两个表的模型,这两个表以一对多的关系链接

表AnimalGroupID,名称

表AnimalSubGroupID、名称、AnimalGroupID

每个动物群都有任意数量的动物子群

如何遍历每个AnimalGroup的AnimalSubGroup并获取AnimalSubGroup.name作为示例?我是asp.net MVC新手,一直在学习各种教程,但尽管这些教程在设置基本应用程序和从单个表中获取结果方面非常出色,但我仍然无法理解如何从同一模型中链接的多个表中获取结果。我曾经看到过将ViewModel作为解决方案的引用,但似乎ViewModel更适合将两个不相关表中的数据放在一个视图中


提前感谢。

首先。您的数据库中是否定义了外键?如果是,edmx模型生成器将定义所有连接。如果没有,现在就做。完成后,您可以通过以下方式选择子组名称:

直接从上下文来看:

context.AnimalSubGroupSet.Wheresg=>sg.AnimalGroupID=requestedAnimalGroupID.Selectsg=>sg.Name.ToList

从AnimalGroup获得:

animalGroup.AnimalSubGroups.Selectsg=>sg.Name


这段代码可能需要调整,但不应该太复杂。

也许您应该看看LINQ的SelectMany查询运算符。此子项迭代一对多数据表关系。请注意,您可以连锁选择多个呼叫:

var mymanyselections = datacontext.parenttable.SelectMany(l=>l.Name).SelectMany(m=>m.Name);

这假设您的数据表中存在外键关系。

您使用什么来访问数据库?Linq到SQL?我不确定-我正在使用Visual Studio和MVC插件,我基本上只是按照向导创建一个包含DB表的模型。我明白了。事实上,ASP.NETMVC只是一个开发web应用程序的框架。因此,在不知道获取实体并将它们返回到视图时,回答您的问题有点困难。如果你能在问题中提供更多的细节,那会有帮助的。如果有帮助的话,我基本上是在遵循这个教程:编辑:哦,我明白你的意思了。我没有使用LINQ,看起来我在使用ADO.NET Entity database.edmx来表示/访问我的表OK。我编辑了这个问题,添加了实体框架和ado.net-entity-data-model标记。这两个标记似乎都不起作用:上下文甚至不存在,第二个有效,但返回一个空列表,我的数据库也不是空的。我正在定义私有AnimalGroupEntities\u animalGroupDataModel=new AnimalGroupEntities,然后将其作为返回视图\u animalGroupDataModel.AnimalGroup.ToList传递给视图;在视图中,我有var groups=item.AnimalGroupSubcategory.Selectsg=>sg.name;然后我迭代组的条目,这就是事情发生的地方。我为评论的混乱道歉-有没有办法添加换行符?@sslepian:如果你想使用第二个,你必须先调用animalGroup.AnimalSubGroups.Load。对于第一个context=\u animalGroupDataModel.Oh哇,这就解决了它。非常感谢!请注意,是否有您推荐的ado.net实体框架的好教程?我发现的书中没有一本涵盖了这一点,而且很多都使用LINQ,这对我来说并不是很有用。@sslepian:我强烈建议你买本书: