【发布时间】:2017-09-13 13:53:15
【问题描述】:
我目前正在为使用 LINQ 从填充了以下内容的数据库获取信息的课程分配作业:
..学生名..|..班级..|..GPA..|.......课程..|..课程编号..|..FinalGrade..|..CSCIGPA..
......“D,卡拉”......|......SR......|......3.8......|......CSCI4220......|...... .....4220…………|…………A…………|…………3.9…… ...
......“D,卡拉”......|......SR......|......3.8......|......CSCI3110......|...... .....3110........|........A........|........3.9.. ....
....“R,思科”.....|....JR.....|...3.1...|...CSCI3010...|........ ...3030........|........B........|........3.4.... ..
....“R,思科”.....|....JR.....|...3.1...|...CSCI2070...|........ ...2070........|........C........|........3.4.... ..
....“R,思科”.....|....JR.....|...3.1...|...CSCI3030...|........ ...3030........|........B........|........3.4.... ..
....“A,巴里”......|....FR.....|...4.0...|...CSCI1010...|.... ....1010........|........A..........|........4.0... ...
....“A,巴里”......|....FR.....|...4.0...|...CSCI2010...|.... ....2010........|........A..........|........4.0... ...
....“问,奥利弗”.....|....SO....|...2.7...|...CSCI2020...|.... ..2010........|........C........|........2.8...... .
....“问,奥利弗”.....|....SO....|...2.7...|...CSCI2020...|.... ..2010........|........C........|........2.8...... .
....“问,奥利弗......|....SO....|...2.7...|...CSCI2030...|......... ..2030........|........C........|........2.8...... .
......“H,罗伊”......|....SO....|...3.8...|...CSCI2020...|...... .....2020............|........A.............|........3.7. .....
我没有包含所有列,但这是一个很好的示例。鉴于此输入,查询应返回按 GPA(从大到小)排序,然后按 CSCIGPA(从大到小)排序的每个班级(FR、SO、JR、Senior)的学生列表。此外,每个要显示的学生都应该有一个连接的“课程”和“最终成绩”,并且每个连接的课程和最终成绩也应该包含在列表中。例如,显示“A, Barry”的记录是:
“A,巴里”,FR,4.0,CSCI1010A CSCI2010A,4.0
注意:形成列 CourseNumber 的单个课程编号“1010 和 2010”不是输出的一部分。
我最大的问题是弄清楚如何将连接的课程和最终成绩纳入单个学生行(当我执行 Distinct() 时,它取消了除第一个课程和成绩之外的所有不同课程和成绩)。这是我写的一些代码,但我承认它不是很好,可能对这个问题没有帮助,因为我已经描述了它。
//method to iterate over all students within student table
public IEnumerable<Student> GetAllStudents() {
var myquery = databaseEDM.Students
.OrderBy(x => x.Class).ThenByDescending(x => x.GPA).ThenByDescending(x => x.CSCIGPA)
.ToList().Distinct();
return myquery;
}
在此分配之前,我从未真正对数据库或查询做过任何事情,因此非常感谢任何帮助。如果我需要提供更多信息以获得正确答案,请告诉我。谢谢。
其他说明:这只是一个简单的控制台应用程序,它从数据库获取信息以输出。
【问题讨论】:
-
提供的数据是非规范化的。因此,显而易见的问题是,如果“A,Barry”至少有一门课程的 GPA、CSCIGPA 或最终成绩不同,该怎么办?