【问题标题】:Linq groupby with joining table带有连接表的 Linq groupby
【发布时间】:2022-01-03 02:30:24
【问题描述】:

假设有一个数据库来管理学生。 我正在使用以下(简化的)类:

学生
int id
字符串名称

学生注册信息
int 学生ID
int courseId

课程
int courseInfo
字符串名称

在上述表中,studentenrollmentinfo 是一个连接表,用于处理课程和学生之间的多对多关系。
现在我想查询当前注册不同课程列表的所有学生的姓名。例如:

让所有学生注册生物、数学和艺术,我想让所有学生注册所有这些课程。

我尝试了以下方法:

List<string> requiredCourses = new List<string>(){"Maths", "Biology", "Arts"}; 

var query = from student in _context.students
join enrollmentInfo in _context.StudentEnrollmentInfo on 
    student.id equals enrollmentInfo.studentId
join course in _context.Course on course.id equals enrollmentInfo.courseId
where requiredCourses.All(r => r.equals(course.name))
select(student.name)

但是这不起作用,我的猜测是因为连接,除了连接表之外,还使列表变平,使得每个具有每个课程组合的学生都是一个唯一值,因此永远不会有任何 AND 条件没错。

任何人都可以提出一些建议来指引我正确的方向吗?

【问题讨论】:

标签: c# sql entity-framework linq


【解决方案1】:
List requiredCourses = new List() { "Maths", "Biology", "Arts" };
var query = (from student in _context.students
            join enrollmentInfo in _context.StudentEnrollmentInfo on student.id equals enrollmentInfo.studentId
            join course in _context.Course on course.id equals enrollmentInfo.courseId
            where **requiredCourses.Contains(course.name)**
            select student.name).Distinct().ToList()

希望它能解决您的问题。 distinct 将有助于您的独特数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2013-07-21
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多