簡體   English   中英

Linq groupby 帶連接表

[英]Linq groupby with joining table

假設有一個數據庫來管理學生。 我正在使用以下(簡化的)類:

學生
內部編號
字符串名稱

學生注冊信息
整型學生ID
國際課程 ID

課程
國際課程信息
字符串名稱

在上述表中,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 條件為真.

任何人都可以提出一些建議來指引我正確的方向嗎?

List requiredCourses = new List() { "數學", "生物學", "藝術" }; var query =(從 _context.students 中的學生加入 _context.StudentEnrollmentInfo 中的學生。id 等於 _context.studentId 加入課程 _context.Course on course.id 等於enrollmentInfo.courseId,其中requiredCourses.Contains(course.name) select 學生。名稱).Distinct().ToList()

希望它能解決你的目的。 distinct 將有助於您的獨特數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM