Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多级子引用的Linq到实体查询_C#_.net_Linq_Linq To Entities_Entity Framework 5 - Fatal编程技术网

C# 具有多级子引用的Linq到实体查询

C# 具有多级子引用的Linq到实体查询,c#,.net,linq,linq-to-entities,entity-framework-5,C#,.net,Linq,Linq To Entities,Entity Framework 5,我在设计一个查询以检索候选人已经尝试过的问题和另一个查询候选人没有尝试过的问题时遇到了太多的问题。这是针对考试/测试/表格/调查类型的申请 该场景是一个候选(OAS_UserDetail)与许多组(OAS_组)关联的场景。 一组可以有很多测试。 考试可能有很多问题。 一个问题可以有很多选择 当候选人尝试提问时,它会存储在引用会话的TestResponse表中(在TestResponse表中选择的答案实际上是QuestionOption.Id)。我相信TestSession可以作为TestRes

我在设计一个查询以检索候选人已经尝试过的问题和另一个查询候选人没有尝试过的问题时遇到了太多的问题。这是针对考试/测试/表格/调查类型的申请

该场景是一个候选(OAS_UserDetail)与许多组(OAS_组)关联的场景。 一组可以有很多测试。 考试可能有很多问题。 一个问题可以有很多选择

当候选人尝试提问时,它会存储在引用会话的TestResponse表中(在TestResponse表中选择的答案实际上是QuestionOption.Id)。我相信TestSession可以作为TestResponse获取用户、测试和组详细信息的桥梁

在我看来,这似乎是一个很好的设计,但对于我来说,通过Linq进行查询有点复杂。 下面是我试图做的事情,但遇到了困难,最终用方法语法而不是查询语法编写Linq


Linq查询语法与SQL非常相似。您应该能够使用“join”操作符执行所需的操作

下面是一个很好的概述:


因此,您正在寻找候选人的问题,这些问题的选项在候选人的
TestResponse
记录中存在或不存在。我认为这是可行的:

(from u in OAS_UserDetail
from g in u.OAS_Group
from t in g.OAS_Test
from q in t.OAS_Question
from o in q.OAS_QuestionOption
where u.Id == userId // a variable
where u.OAS_TestSession
      .SelectMany(s => s.OAS_TestResponse)
      .Select(r => r.AnswerSelectedId).Contains(o.Id)
select q).Distinct()
对于候选人没有尝试的问题:
where!u、 OAS_测试会话…

(from u in OAS_UserDetail
from g in u.OAS_Group
from t in g.OAS_Test
from q in t.OAS_Question
from o in q.OAS_QuestionOption
where u.Id == userId // a variable
where u.OAS_TestSession
      .SelectMany(s => s.OAS_TestResponse)
      .Select(r => r.AnswerSelectedId).Contains(o.Id)
select q).Distinct()