【发布时间】:2015-08-13 23:58:20
【问题描述】:
我有一个简单的场景,我想编写 LINQ 查询,但我无法正确处理。这是场景:
我有 3 张桌子:
STUDENT:
--------------------------
SID Name
---------------------
1 Jhon
2 Mishi
3 Cook
4 Steven
COURSE:
-------------------
CID Name
-------------------
1 Maths
2 Physics
3 Bio
4 CS
STUDENTCOURSE:
---------------------------
SCID SID CID
-----------------------
1 1 1
2 1 2
3 1 4
4 2 1
5 2 2
6 2 3
7 3 1
8 3 4
10 4 2
对于这种情况,我想传递课程 ID 数组来查询并返回所有注册了所有这些课程的学生。我尝试了什么:
int[] cIds = {1,2,4 };
var result = from s in context.Students
where s.StudentCourses.Any(sc=> cIds.Contains(sc.CID))
select s;
但这会返回注册课程 ID 为 1、2、4 的学生。 希望你能理解我的问题。
感谢您的帮助。
【问题讨论】:
-
如果我理解正确,您当前的查询会为您提供已注册课程 1 或 2 或 4 的任何学生的结果。您希望获得已注册所有三门课程的学生的结果?
-
我会把它留给其他人来提出这个语句(我可以在 SQL 中轻松地做到这一点,但我的 linq 分组已经生锈了)。从 StudentCourse 中选择 SID,方法是按 SID 分组,计算 cIds 中的 CID,计数等于 cIds 的长度。
-
@AndyNichols:听起来比我的解决方案更好。 :) 干得好。
-
@T.Rahgooy 我认为我的评论仍然有效。 “counting CID where in cIds”部分意味着任何不在cIds中的课程都将被忽略。
-
@AndyNichols,是的,你说得对,我没注意到。
标签: c# asp.net entity-framework