2016-12-27 61 views
0

我有三个表的外键遵循LINQ表由另一个表

  1. 课程(ID,姓名,DESC)
  2. 学生(ID,姓名,courceId)
  3. 用户(ID,名,courseId)

see img

我需要得到其当前用户分配到课程的学生。

我的问题是如何获得这对于一台 外键我做了以下,但该代码示例访问数据库twice.Is有什么办法可以让一个访问表中的记录。

 var userId = User.Identity.GetUserId(); 

     var courseId = _context.Users 
      .Where(u => u.Id == userId) 
      .Select(u => u.CourseId) 
      .Single(); 

     var students = _context.Students 
      .Where(s => s.CourseId == courseId) 
      .ToList(); 
+0

这样,代码首先,模型第一或数据库第一?如果你正确地设置了User和Student,你可以调用'_context.Users.Include(“Student”)来延迟加载Student关系(无论是两三个,还是一个查询,都取决于实体框架**,没有什么我们可以做的..但它往往是有效的无论如何) –

+2

请在发布问题之前至少做一些**最小化**研究。输入您的标题[在谷歌](https://www.google.com/#q=LINQ+to+table+by+foreign+key+in+another+table)并检查第一个结果。 – Sefe

+1

[在LINQ中用C#使用外键导航属性来查询表格的可能的副本](http://stackoverflow.com/questions/6764013/query-a-table-by-using-foreign-key-navigation-properties- in-linq-with-c-sharp) – Sefe

回答

0

就像在T-SQL,您需要一个连接:

 var userId = User.Identity.GetUserId(); 

var students = _context.Users.Where(x => x.Id == userId) 
.Join(_context.Students, u => u.CourseId, s => s.CourseId, (u,s) => s) 
.ToList(); 
+0

谢谢你,你救了我的一天;) – Shady