Entity framework 实体框架linq到实体

Entity framework 实体框架linq到实体,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,以前,当我想在sql查询中获取相关数据时,我会连接表,但是现在在linq中,我想通过另一个表从与该表相关的表中获取数据。我不知道如何在LINQtoEntities中执行这种查询。如果有人能帮忙,那就太好了 该示例是一个名为person的表,它与与表角色相关的表用户有关系。我希望能够找到一个有特殊角色的人。由于person只与用户相关,并通过用户到角色间接关联,所以我不确定查询是否正确。同样,使用导航属性也不能让我完全达到目的 任何信息都可以。以下是数据库结构的一个示例: 如果您在VS中使用生成器

以前,当我想在sql查询中获取相关数据时,我会连接表,但是现在在linq中,我想通过另一个表从与该表相关的表中获取数据。我不知道如何在LINQtoEntities中执行这种查询。如果有人能帮忙,那就太好了

该示例是一个名为person的表,它与与表角色相关的表用户有关系。我希望能够找到一个有特殊角色的人。由于person只与用户相关,并通过用户到角色间接关联,所以我不确定查询是否正确。同样,使用导航属性也不能让我完全达到目的

任何信息都可以。以下是数据库结构的一个示例:


如果您在VS中使用生成器(即,drap drop数据表和图表以及键都在db中设置),那么您所要求的东西可能已经自动存在了

e、 g

确切的名称需要参考代码生成器,但这是一个想法。Linq to实体将有助于为您映射外键和外键

编辑

实际上,我还没有尝试使用include。但是根据,include应该显示要工作的对象层次结构。因此,要使查询正常工作,请尝试:

from c in db.Persons.Include("aspnet_Users").Include("aspnet_Roles")
    where c.aspnet_Users.aspnet_Roles.RoleName == "Role" select c
<> P>此外,你会考虑从角色开始吗?
from r in db.aspnet_Roles
where r.RoleName == "ROLE"
select r.aspnet_Users.Persons

如果您在VS中使用生成器(即,drap drop数据表和图表以及键都在db中设置),那么您所要求的东西可能已经自动存在了

e、 g

确切的名称需要参考代码生成器,但这是一个想法。Linq to实体将有助于为您映射外键和外键

编辑

实际上,我还没有尝试使用include。但是根据,include应该显示要工作的对象层次结构。因此,要使查询正常工作,请尝试:

from c in db.Persons.Include("aspnet_Users").Include("aspnet_Roles")
    where c.aspnet_Users.aspnet_Roles.RoleName == "Role" select c
<> P>此外,你会考虑从角色开始吗?
from r in db.aspnet_Roles
where r.RoleName == "ROLE"
select r.aspnet_Users.Persons
解决了,谢谢你的努力


谢谢您的尝试。

我最初寻找的是特定角色中的所有用户,而不是每个人的角色。这样做的问题是,由于某种原因,aspnet_Users.aspnet_Roles.RoleName不可用……您的意思是映射属于特定组的所有用户,对吗?你能在这里发布更多信息来了解它为什么不起作用吗?返回(从db.Persons.Include(“aspnet_用户”)中的c,其中c.aspnet_Users.aspnet_Roles.RoleName==“Role”选择c);是我所质疑的,但是RoleName似乎不存在。。。(“角色”只是一个占位符,我在查询时使用一个实际的角色)我考虑从角色开始,并认为这会起作用,但我想返回一个人。我认为include的语法是使用点语法分隔相关表,但会尝试使用多个include方法。不,这样做也没有好处,在使用sql连接时,您可能会认为有一个简单的解决方案。我最初寻找的是某个特定角色中的所有用户,而不是每个人的角色。这样做的问题是,由于某种原因,aspnet_Users.aspnet_Roles.RoleName不可用……您的意思是映射属于特定组的所有用户,对吗?你能在这里发布更多信息来了解它为什么不起作用吗?返回(从db.Persons.Include(“aspnet_用户”)中的c,其中c.aspnet_Users.aspnet_Roles.RoleName==“Role”选择c);是我所质疑的,但是RoleName似乎不存在。。。(“角色”只是一个占位符,我在查询时使用一个实际的角色)我考虑从角色开始,并认为这会起作用,但我想返回一个人。我认为include的语法是使用点语法分隔相关表,但会尝试使用多个include方法。不,这样做也没有好处,在使用sql连接时,您可能会认为有一种解决方案非常简单。在编写sql这么长时间之后,编写这样的内容仍然感觉有点不自然…return(从db中的u.Persons from c in db.aspnet_Roles,其中c.RoleName==”选择u);更棒的是,我已经使用LINQ2SQL一段时间了,对我来说这是很自然的(除了需要考虑性能的时候)。唯一的主要区别是,在使用Linq时,尽量不要以sql的方式思考,您的问题很不寻常,我相信在Linq 2 sql中,我从未遇到过这种情况(甚至我以前从未使用过Include),在编写sql这么长时间之后,编写这样的东西仍然感觉有点不自然……返回(来自db中的u.Persons来自db.aspnet中的c角色,其中c.RoleName==”“选择u);更好的版本我已经使用Linq 2 Sql一段时间了,对我来说这是很自然的(除了需要考虑性能时)。唯一的主要区别是,在使用Linq时,尽量不要以sql的方式思考,您的问题很不寻常,我相信在Linq 2 sql中,我从未遇到过这种情况(我以前甚至从未使用过Include)