我一直在设计一个查询来检索候选人已经尝试的问题以及针对候选人未尝试的问题的另一个查询时遇到了太多麻烦。这适用于考试/考试/表格/调查类型的申请。Linq到具有多级子引用的实体查询
的情况是候选人(OAS_UserDetail)与多组(OAS_Group)相关联。 一组可以有很多测试。 一个测试可以有很多问题。 一个问题可以有很多选项。
当候选人尝试提问时,它存储在引用会话的表TestResponse中(表TestResponse中的answerSelected实际上是QuestionOption.Id)。我相信TestSession可以作为TestResponse的桥梁,以获取用户,测试和组的详细信息。
这对我来说似乎是一个很好的但有点复杂的设计,只要通过Linq来查询。 下面是我试图做的事情,并被卡住,并最终在方法语法而不是查询语法中编写Linq。
OAS.DataModels.OAS_Question questionsAttempted =
from q in db.OAS_Questions
where q.OAS_Test.OAS_Group.Candidates.Contains(
db.OAS_UserDetails.Single(u => u.UserName == HttpContext.User.Identity.Name)
)
select q;