【问题标题】:How to fill a nested (Parent/Child) list using two DataTables using LINQ如何使用 LINQ 使用两个 DataTables 填充嵌套(父/子)列表
【发布时间】:2019-04-09 16:47:02
【问题描述】:

我是 Linq 和 c# 的新手。 我正在使用两个数据表填充两个嵌套列表。有一个 StudentList 是父列表。每个学生都有每门课程的 GradeList。我可以从数据库中获取两个数据集作为数据表,一个是学生,另一个是年级。在 Grade 类中有一个 studentID,可以与 Student 链接。如何填充 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。 非常感谢

【问题讨论】:

  • 如何放置where子句?此外,还有一个错误 CS1061 'Grade' 不包含 'ToList' 的定义,并且找不到接受“Grade”类型的第一个参数的可访问扩展方法“ToList”(您是否缺少 using 指令或程序集引用?)

标签: c#


【解决方案1】:

试试这个:

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() 需要在右括号之后,GradeListwhere 条件需要引用对象初始值设定项之外的变量,因为Student 对象尚未完全构造。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2021-06-11
    • 2020-12-10
    相关资源
    最近更新 更多