我可以有一个where子句,工作在LINQ查询的孙子

本文关键字:查询 LINQ 工作 有一个 where 子句 我可以 | 更新日期: 2023-09-27 17:52:55

我有三个表,每个表都连接一个主键和一个外键,如testd和usertestd等。

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,然后在另一个方向向上而不是向下工作吗?

我可以有一个where子句,工作在LINQ查询的孙子

在这个问题上,他们提供了一个解决方案,可以满足你的要求,但在我看来,感觉有点像黑客。
或者,您也可以不使用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();