2016-12-27 79 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