为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 LINQ 使用两个数据表填充嵌套(父/子)列表

如何使用 LINQ 使用两个数据表填充嵌套(父/子)列表

C#
鸿蒙传说 2022-12-04 10:36:37
我是 Linq 和 C# 的新手。我正在使用两个数据表填充两个嵌套列表。有一个 StudentList 是父列表。每个学生的每门课程都有一个 GradeList。我可以从数据库中获取两个数据集作为数据表,一个是学生,另一个是年级。在 Grade 类中有一个可以与 Student 链接的 studentID。如何填充 StudentList?    public class Student{    public string ID { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }    public string Email { get; set; }    public List<Grade> GradeList { get; set; }}  public class Grade{    public string CourseID { get; set; }    public string CourseTitle { get; set; }    public decimal CourseGrade { get; set; }    public string studentID { get; set; }}//下面是代码DataTable dt = ds.Tables[0];  //students        DataTable dt1 = ds.Tables[1]; //Grades        studList = (from DataRow dr in dt.Rows                        select new Student()                        {                            ID = dr["ID"].ToString(),                            FirstName = dr["FIRSTNAME"].ToString(),                            LastName = dr["LASTNAME"].ToString(),                            GradeList = (from DataRow gdr in dt1.Rows as IEnumerable                                       //  where gdr["studentID"] == ID                                         select new Grade()                                          {                                             CourseID = gdr["COURSEID"].ToString(),                                             CourseTitle = gdr["COURSETITLE"].ToString(),                                             CourseGrade = Convert.ToDecimal(gdr["COURSEGRADE"]),                                             studentID = gdr["STUDENTID"].ToString()                                         }.ToList()                                         )                        }).ToList();我期待填写 studList。非常感谢
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

尝试这个:


studList = 

    (from DataRow dr in dt.Rows

     select new Student()

     {

         ID = dr["ID"].ToString(),

         FirstName = dr["FIRSTNAME"].ToString(),

         LastName = dr["LASTNAME"].ToString(),

         Email = dr["EMAIL"].ToString(),

         GradeList = 

             (from DataRow gdr in dt1.Rows as IEnumerable

              where gdr["studentID"] == dr["ID"]

              select new Grade() 

              {

                  CourseID = gdr["COURSEID"].ToString(),

                  CourseTitle = gdr["COURSETITLE"].ToString(),

                  CourseGrade = Convert.ToDecimal(gdr["COURSEGRADE"]),

                  studentID = gdr["STUDENTID"].ToString()

              }).ToList()

      }).ToList();

第一个ToList()需要在右括号之后,where条件 forGradeList需要引用对象初始值设定项之外的变量,因为Student对象尚未完全构造。


查看完整回答
反对 回复 2022-12-04
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信