我可以在LINQ查询中使用where子句对孙子进行操作吗?

时间:2014-03-25 11:43:52

标签: c# linq

我有三个表,每个表都连接一个主键和外键,如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,然后向上工作而不是向下工作吗?

1 个答案:

答案 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();