我在设计一个查询来检索候选人已经尝试过的问题以及另一个查询候选人没有尝试过的问题时遇到了太多麻烦。这是一个考试/测试/表格/调查类型的应用程序。
该场景是一个候选(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;