如何使用linq获取mvc5中的所有子记录

时间:2014-08-13 14:40:42

标签: c# entity-framework

我有一个数据库结构

users
 --username
 --ProfileId
 --passwordhash

Profile
 --Id
 --name

Drives
 --id
 -- name

userDrives
 --Id
 --ProfileId
 --DriveId

我希望获得当前登录用户的所有驱动器。我通常会编写一个存储过程来获得所需的结果。但是我试图首次使用linq(学习)并在多年致力于其他技术之后重新使用asp.net编程。

如果问题非常新鲜,请耐心等待

2 个答案:

答案 0 :(得分:0)

如何为当前用户获取所有驱动器?

使用Entity Framework时,您可以向实体添加导航属性。导航属性表示实体之间的关系。在这里,您可以在云端硬盘和个人资料之间建立一对多的关系,您可以为您的实体添加导航属性,如下所示:

  • ICollection<Drive>属性添加到Profile实体。
  • Profile属性添加到Drive实体。
  • User属性添加到Profile实体。
  • Profile属性添加到User实体。

当您拥有用户的实例时,可以使用user.Profile.Drives检索其驱动器(此处为驱动器为ICollection<Drive>)。您还可以使用它向该用户添加新驱动器,不要忘记最后调用SaveChanges。使用导航属性时,您应该注意EF能够为您的实体创建代理,否则它们将为null,因为EF不能对您的实例进行延迟加载。如果您想了解有关此主题的更多信息,请查找Entity Framework Proxies

答案 1 :(得分:0)

你可以做类似的事情:

var result =(来自u中的用户在用户驱动中加入ud在u.ProfileId等于ud.ProfileId在驱动器中加入d在ud.DriveId中等于d.id其中u.username == loggedinUsername选择d).ToList();