Я новичок в Linq и С#. Я работаю над заполнением двух вложенных списков с использованием двух таблиц данных. Существует StudentList - это родительский список. У каждого студента есть GradeList для каждого курса. Я могу получить два набора данных в виде таблиц данных из базы данных, один - студент, другой - класс. В классе Grade есть идентификатор студента, который может быть связан со студентом. Как я могу заполнить 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. Большое спасибо
Попробуй это:
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
для GradeList
должно ссылаться на переменную вне инициализатора объекта, потому что объект Student
еще не полностью сконструирован.
Как поставить предложение where? также существует ошибка CS1061 «Оценка» не содержит определения для «ToList», и не может быть найден доступный метод расширения «ToList», принимающий первый аргумент типа «Оценка» (вам не хватает директивы использования или ссылки на сборку ?)