#c#
#c#
Вопрос:
Я новичок в Linq и c #. Я работаю над заполнением двух вложенных списков с использованием двух таблиц данных.Есть 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();
Я рассчитываю заполнить список участников.
Большое спасибо
Комментарии:
1. Как поместить предложение where? кроме того, возникает ошибка CS1061 ‘Grade’ не содержит определения для ‘ToList’ и не может быть найден доступный метод расширения ‘ToList’, принимающий первый аргумент типа ‘Grade’ (вам не хватает директивы using или ссылки на сборку?)
Ответ №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()
должна быть после закрывающей круглой скобки, а where
условие для GradeList
должно ссылаться на переменную вне инициализатора объекта, поскольку Student
объект еще не полностью сконструирован.