2009-07-24 168 views
0

以前,当我想要在SQL查询中获取相关数据时,我会连接表,但是现在在LINQ中实体我想从通过另一个表相关的表中获取数据。我不知道如何在实体中执行这种查询。如果有人能够帮助那会很好。实体框架LINQ到实体

该示例是一个名为person的表,它与表用户的关系与表角色相关。我希望能够获得一个具有特定角色的人。由于人员只与用户相关,并且通过用户间接与角色相关,所以我不确定该查询。同样使用导航属性也不会让我一路走到那里。

任何信息都会很好。这里是数据库结构的一个例子:

db structure http://img194.imageshack.us/img194/4540/persons.jpg

回答

2

如果你使用VS发电机(即DRAP删除数据表格和图表和键在数据库中的所有设置),则事你问可能已经自动地在那里。

例如

from Person in Context.Persons 
where Person.Name == "PETER PAN" 
select Person.User.Role.RoleName; 

确切的名字需要引用代码生成器,但这是主意。 Linq到实体将帮助映射外键和那些给你。

编辑

其实我没有试过使用include。但根据msdn:include method,include应显示对象层次结构才能工作。所以,为了您的查询工作,请尝试:

from c in db.Persons.Include("aspnet_Users").Include("aspnet_Roles") 
    where c.aspnet_Users.aspnet_Roles.RoleName == "Role" select c 

此外,你会考虑从角色开始?

from r in db.aspnet_Roles 
where r.RoleName == "ROLE" 
select r.aspnet_Users.Persons 
+0

我最初寻找的是一个特定角色中的所有用户,而不是每个人的角色。这样做的问题是,aspnet_Users.aspnet_Roles.RoleName由于某种原因不可用... – user125140 2009-07-24 04:14:16

+0

您的意思是映射属于特定组的所有用户,对吧?你能在这里发表更多,看看它为什么不起作用吗? – xandy 2009-07-24 08:29:32

1
(from u in db.aspnet_Users.Include("Person") 
from c in db.aspnet_Roles 
where c.RoleName == "role" 
select u.Persons); 

工作了感谢,虽然尝试。