LINQ-EF查询分组多个表

时间:2015-04-27 09:06:11

标签: c# linq entity-framework

我使用LINQ进行了一个复杂的查询。我知道手动多循环的方法,但我想用LINQ查询来做到这一点:

场景:学生考试中心

数据库在我的场景中涉及5个基本表:测试,问题,答案,结果和参与者。

测试包含测试本身。 (int testId,string testName)。与问题的1-N关系。

问题包含测试问题。 (int questionID,int testId,string questionText)

答案包含问题的所有可能答案:(int answerId,int questionId,bool isCorrect)与问题的1-N关系。

结果包含每个答案的记录,与回答问题的学生相关:(int ResultId,int AnswerId,int participantId,bool isSelectedByParticipant)与Answers的1:1关系。

参与者 :( int participantId)。与结果的1:1关系。

我想知道学生每次考试成功回答了多少答案(所以学生当然可以做一些考试)。一个问题可以有一个或多个答案是正确的,但总是至少有一个答案是正确的,所以如果与问题相关的每个答案都没有被学生标记(isSelectedByParticipant = false),那么该问题的结果就是错误的。

enter image description here

非常感谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

类似于:

   declare @tb table ( ln          int
,                   RunCostFoot money ) insert into @tb
values ( 1,  0.99   )
,      ( 2,  0.99   )
,      ( 3,  0.00   )
,      ( 4,  0.00   )
,      ( 5,  1.4083 )
,      ( 6,  0.66   )
,      ( 7,  0.00   )
,      ( 8,  0.36   )
,      ( 9,  0.00   )
,      ( 10, 0.00   )
,      ( 11, 0.00   )

;with cte ( rno
,           val )
as
(
    select ln as rno
    ,      RunCostFoot as val
    from @tb
    where ln=1
    union all
    select rno+1 as rno
    ,      case when RunCostFoot =0 then val
                                    else RunCostFoot end as val
    from @tb t
    join cte   on t.ln=cte.rno+1
)
select *
from cte

这是有效的example