实体:返回数组子集中的记录集

时间:2015-10-11 16:43:41

标签: c# entity-framework linq

我有三张桌子:学生,课程和学生课程。 StudentCourse只是一个联结表(也就是边表,链接表等),其中包含该行的唯一ID以及学生ID和课程ID。

我有一个表示课程的整数数组,因此输入可能只是1,2,3。 (这将来自对REST API的GET请求,但源并不重要)。

给定一个整数数组,我想返回所有与数组中所有课程ID相关联的学生。但是,我仍然希望归还那些可能没有通过课程ID的学生,因为他们甚至没有那么多的关联。

要概述这一点,假设我们有以下内容:

enter image description here

Student1有1,2门课程

Student2有2,3,4课程

我传入一个包含1,2,3的数组。尽管Student1没有课程ID 3,但仍然应该返回(他们的课程列表是我传入的SUBSET)。

1 个答案:

答案 0 :(得分:0)

假设您拥有Student实体和Course实体。如果您正确设计模型,Student应公开CoursesCourse应公开Students

查询可以是这样的(使用Contains):

//the input courseIDs
var courseIDs = new [] { 1,2,3 };
var students = Students.Where(e => e.Courses.All(x => 
                                     courseIDs.Contains(x.ID)).ToList();

以下是使用Except的另一个查询:

var students = Students.Where(e => e.Courses.Select(x => x.ID)
                                    .Except(courseIDs).Count() == 0)
                                    .ToList();