我使用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),那么该问题的结果就是错误的。
非常感谢大家的帮助。
答案 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