我有三个表,每个表都连接一个主键和外键,如TestId和UserTestId等。
Exam > Test > UserTest
我的理解是我可以使用LINQ来获取这些数据:
var exams = _examsRepository
.GetAll()
.Where(q => q.SubjectId == subjectId)
.Include(q => q.Tests.Select(t => t.UserTests))
.ToList();
这将选择所有考试,考试测试以及那些测试的用户测试,其中SubjectId == subjectID
有没有可能的方法我可以进一步限制它,以便它只显示UserTests的UserId为123时的数据?
如果答案是否定的,那么我应该重写这个LINQ,首先转到_userTestsRepository,然后向上工作而不是向下工作吗?
答案 0 :(得分:0)
在this question中,他们提供的解决方案可以满足您的需求但在我看来有点像黑客。
或者,您可以远离include语句并进行手动连接,您可以根据需要在子表上应用尽可能多的过滤器。
看起来像这样的小事:
var data = (from ex in context.exams
join t in context.tests on ex.Id equals test.ExamID
join ut in context.userTests on t.Id equals ut.TestId
where ut.UserId = 123
select new {ex, ut}).ToList();