0
我有由類表示的三個SQL表,我想有實體框架6加入這些表,所以我得到了Exam
,Test
和UserTest
表,其中UserTest.UserID
是0
或X
的所有細節。如何在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",
請注意,這開始重複並且帶回比我預期更多的數據
@jmcihinney - 謝謝 - 在這種情況下,我需要獲取UserTest.UserID爲「0」或「X」的所有記錄。你能告訴我怎麼把這個添加到LINQ中嗎?對不起,如果你沒有看到它,它已被添加到我的questin幾分鐘前 – Melina
你是說你想要所有的UserTest記錄,其中任何一個有一個測試的ID或者你只想要的UserTest記錄有其中一個ID?您當然可以根據子女,孫輩等的屬性過濾父記錄,但我不確定是否可以篩選包含在結果集中的子女等。 – jmcilhinney
UserTest表是唯一具有UserId列的表。我只想得到一個結果集,以便只返回具有所需UserIds的那些結果集。對於SQL,它會像加入所有三個表,然後是一個簡單的Where UserTests.UserId = ...或..作爲替代方案,我應該可能會違反UserTest存儲庫幷包括測試和考試? – Melina