【发布时间】:2014-01-21 20:17:44
【问题描述】:
我对三个表感兴趣,以下是相关信息:
+---------------+ +---------------+ +---------------+ +---------------+
| Class | | Tests | | StudentClasses| | Student |
+---------------+ +---------------+ +---------------+ +---------------+
| ClassID | | ClassID | | ClassID | | StudentID |
| | | WholeYearTest | | StudentID | | StudentYear |
| | | TestYear | | | | |
+---------------+ +---------------+ +---------------+ +---------------+
我有一个变量login,它是一个Student。
我在 LINQ 中运行这个查询:
from tests in App.db.Tests
join studentClasses in App.db.StudentClasses on tests.ClassID equals studentClasses.ClassID
where (
(tests.WholeYearTest == true && tests.TestYear == login.StudentYear)
||
studentClasses.StudentID == login.StudentID
)
select tests;
不幸的是,我只得到了符合条件studentClasses.StudentID == login.StudentID的结果
我想要什么:
- 由于
StudentYear等于TestYear和WholeYearTest为真而学生必须参加的所有测试 - 学生必须参加的所有测试,因为与其关联的可能多个
StudentClasses之一列在Tests.ClassID下。
我认为这可能是由于对 JOIN 工作原理的公然误解,但我想不出任何其他方式来实现这一点。除了循环所有测试之外,任何人都可以提出实施建议吗?如果没有,我想我会使用循环,但我确信在 LINQ 中必须有某种方法来实现它。
【问题讨论】:
-
是否可以在没有考试的情况下开设学生课程?因为如果您的第二个条件仅出现在班级没有测试的情况下,您将永远不会获得这些记录。加入将从结果集中删除这些记录。
-
测试可以是全年(即第 6 年)或特定班级,由 tests.TestYear 规定。有什么方法可以阻止加入删除这些记录?
-
理想情况下,我希望选择因学生一年的全年测试而导致的测试,或者具体适用于学生的任何班级。
-
Join 的目的其实就是删除那些记录 :)
-
那么我有什么办法可以通过 LINQ 做我想做的事吗?我只是想使用 join 将另一个表带入等式,只是为了测试学生的班级关系。
标签: c# .net linq linq-to-sql