2014-03-25 29 views
0

我有由類表示的三個SQL表,我想有實體框架6加入這些表,所以我得到了ExamTestUserTest表,其中UserTest.UserID0X的所有細節。如何在LINQ查詢中包含多個關卡?

我已經建立了一個存儲庫,這適用於簡單查詢,但是我無法加入問題底部的LINQ中的UserTest類。

這裏是我的課:

public class Exam 
{ 
    public int ExamId { get; set; } 
    public int SubjectId { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Test> Tests { get; set; } 
} 

public class Test 
{ 
    public int TestId { get; set; } 
    public int ExamId { get; set; } 
    public string Title { get; set; } 
    public virtual ICollection<UserTest> UserTests { get; set; } 
} 

public class UserTest 
{ 
    public int UserTestId { get; set; } 
    public string UserId { get; set; } 
    public int TestId { get; set; } 
    public int QuestionsCount { get; set; } 
} 

我想要做的是有一個查詢,看起來像這樣:

var exams = _examsRepository 
      .GetAll() 
      .Where(q => q.SubjectId == subjectId) 
      .Include(q => q.Tests) 
      .Include(q => q.Tests.UserTests) // Error on this line 
      .ToList(); 

但它不是讓我包括在VS2013 UserTests

更新:

下面是該查詢我第一次嘗試:

var userTests = _userTestsRepository 
     .GetAll() 
     .Include(t => t.Test) 
     .Include(t => t.Test.Exam) 
     .Where(t => t.UserId == "0" || t.UserId == userId); 

這一次似乎但是在工作的時候我看了一下輸出,我看到這樣的事情:

[{"userTestId":2, 
    "userId":"0", 
    "testId":12, 
    "test":{ 
     "testId":12,"examId":1, 
     "exam":{ 
      "examId":1,"subjectId":1, 
      "tests":[ 
       {"testId":13,"examId":1,"title":"Sample Test1", 
       "userTests":[ 
         {"userTestId":3, 
         "userId":"0", 

請注意,這開始重複並且帶回比我預期更多的數據

回答

1

這是因爲測試是一個集合,而不僅僅是一個對象,所以它沒有UserTests屬性。您使用lambda指定多個孩子的孫子,而不是一個孩子:

var exams = _examsRepository 
      .GetAll() 
      .Where(q => q.SubjectId == subjectId) 
      .Include(q => q.Tests.Select(t => t.UserTests)) 
      .ToList(); 

注意,有沒有必要,因爲孩子們都隱含如果你包括孫子的其中兩個電話。

+0

@jmcihinney - 謝謝 - 在這種情況下,我需要獲取UserTest.UserID爲「0」或「X」的所有記錄。你能告訴我怎麼把這個添加到LINQ中嗎?對不起,如果你沒有看到它,它已被添加到我的questin幾分鐘前 – Melina

+1

你是說你想要所有的UserTest記錄,其中任何一個有一個測試的ID或者你只想要的UserTest記錄有其中一個ID?您當然可以根據子女,孫輩等的屬性過濾父記錄,但我不確定是否可以篩選包含在結果集中的子女等。 – jmcilhinney

+0

UserTest表是唯一具有UserId列的表。我只想得到一個結果集,以便只返回具有所需UserIds的那些結果集。對於SQL,它會像加入所有三個表,然後是一個簡單的Where UserTests.UserId = ...或..作爲替代方案,我應該可能會違反UserTest存儲庫幷包括測試和考試? – Melina