以前当我想在sql查询中获取相关数据时,我会连接表,但是现在在linq中我希望通过另一个表从表中获取数据的实体。我不知道如何在linq中对实体执行这种查询。如果有人可以提供帮助,那将是件好事。
该示例是一个名为person的表,它与表用户有关系,与表角色相关。我希望能够获得一个具有特定角色的人。由于人只与用户有关,间接通过用户与角色相关,所以我不确定查询。另外使用导航属性也不能让我一路走来。
任何信息都会很好。以下是数据库结构的示例:
db structure http://img194.imageshack.us/img194/4540/persons.jpg
答案 0 :(得分:2)
如果您在VS中使用生成器(即,drap drop数据表和图表以及键都在db中设置),那么您要求的东西可能已经自动存在。
e.g。
from Person in Context.Persons
where Person.Name == "PETER PAN"
select Person.User.Role.RoleName;
确切名称需要引用代码生成器,但这是个主意。 Linq to entities将帮助您映射外键和那些外键。
修改
其实我没有尝试过使用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
答案 1 :(得分:1)
(from u in db.aspnet_Users.Include("Person")
from c in db.aspnet_Roles
where c.RoleName == "role"
select u.Persons);
感谢你努力尝试。