【发布时间】:2016-12-01 08:17:52
【问题描述】:
这是我来自数据库的原始数据:
PrimaryColumn StudentId StudentName CourseName CourseId CourseDuration
1 1 X Cse1 C1 2
2 1 X Cse2 C2 1
3 1 X Cse3 C3 3
4 2 Y Cse1 C1 2
5 2 Y Cse4 C4 5
来自 C# 的类结束:
public class Student
{
public int StudentId {get; set;}
public string StudentName {get; set}
public List<Course> Courses {get; set;}
}
public class Course
{
public int CourseId {get; set;}
public string CourseName {get; set;}
public int CourseDuration {get; set; }
}
我的目标是获取按学生分组的数据以及他们将要学习的课程,这些数据是使用 List<Course> 作为学生类的属性来完成的。
所以,我认为这个目标非常前卫。因此,我继续对从 DB 到 C# 的原始数据使用 GroupBy,希望得到结果,但无济于事。
这是迄今为止我得到的最好的。
masterData.GroupBy(x => new { x.StudentId, x.StudentName }, (key, group) => new { StudentId = key.StudentId, StudentName = key.StudentName, Courses=group.ToList() }).ToList();
虽然这并没有让我得到我希望得到的东西。通过发布此调用后的一些次要代码解决方法,我能够实现我所需要的。但是,每次我无法正确地对原始数据进行分组,这让我很恼火。
如果有人能向我展示进一步优化上述代码的正确方法或完全不同的方式,那将非常有帮助。
这就是我需要将结果放在List<Student>: 中的方式
Student:
StudentId: 1
StudentName: X
List<Course> Courses: [0] - { CourseId: C1, CourseName = Cse1, CourseDuration = 2}
[1] - { CourseId: C2, CourseName = Cse2, CourseDuration = 1}
[2] - { CourseId: C3, CourseName = Cse3, CourseDuration = 3}
Student:
StudentId: 2
StudentName: Y
List<Course> Courses: [0] - { CourseId: C1, CourseName = Cse1, CourseDuration = 2}
[1] - { CourseId: C4, CourseName = Cse4, CourseDuration = 5}
干杯
【问题讨论】:
-
请正确书写您的班级声明。不是公班学生,是公班学生。
-
这不是您问题的答案,但您的表结构有问题。当课程的持续时间发生变化时会发生什么?更新表中的所有值?更好的方法是使用单独的 Student、Course 和 StudentCourses 表,请参阅 Database Normalization
-
@HebeleHododo 我同意,但这是我得到的数据,而不是我无法控制的数据库中存在的数据。
标签: c# c#-4.0 lambda generic-collections