Навигация по связи «многие ко многим таблицам» в наборе данных (оптимизация) - PullRequest
0 голосов
/ 18 июля 2010

У меня есть набор данных, который содержит таблицы из университетской базы данных, две (на самом деле больше) из этих таблиц содержат отношение многие ко многим, в частности, у меня есть таблица

студентов (Содержит информацию о студентах) Курсы стол (Содержит информацию о курсах) TakesCourses стол (который является промежуточной таблицей между Студентами и Курсами таблицы, каждый студент может иметь много курсов)

Я хочу ввести «идентификатор студента» и извлечь все записи из таблицы Courses в соответствии с записями, найденными в TakesCourses таблица.

Мой код РАБОТАЕТ и выглядит следующим образом:

string stdInfo = string.Empty;

DataRow[] drStudent = null;
DataRow drCourses = null;
DataRow[] drStdCrs = null;

drStudent = universityDS.Tables["Students"]
    .Select(string.Format("StudentID='{0}'", txtStudentID.Text));

stdInfo += string.Format("Student {0} {1}:\nTaking Courses:",
    drStudent[0]["FirstName"].ToString().Trim(),
    drStudent[0]["LastName"].ToString().Trim());

drStdCrs = drStudent[0].GetChildRows(
    universityDS.Relations["FK_TakesCourses_Students"]);

//Can I optimize here? Is there a better way to code this
if (drStdCrs.Length > 0)
{
    for (int i = 0; i < drStdCrs.Length; i++)
    {
        drCourses = drStdCrs[i].GetParentRow(
            universityDS.Relations["FK_TakesCourses_Courses"]);

        stdInfo += string.Format("\nCourse: {0}",
            drCourses["CourseName"]);
    }               
}

MessageBox.Show(stdInfo);

Мой вопрос, как я могу оптимизироватькод после комментариев?Есть ли лучший способ написать это?

(Примечание: я выздоравливающий разработчик, пытаюсь обновить свои навыки)

Ответы [ 2 ]

1 голос
/ 18 июля 2010

Если версия .NET Framework, которую вы используете (или можете использовать на основе проекта), поддерживает LINQ2SQL I ВЫСОКО , рекомендуем вам потратить время на изучение LINQ, поскольку это сделает вашу жизнь тысячью В разы проще как при работе с SQL, так и в повседневной работе с .NET.

В наше время я бы избегал встроенного SQL, если только он не является вашим единственным средством, поскольку в большинстве заведений он часто наказывается смертью: ¬ (.

0 голосов
/ 18 июля 2010

Я полностью согласен с JDoig.Вот пример того, как ваш код может выглядеть при использовании LINQ to SQL:

string stdInfo = string.Empty;
string studentId = txtStudentID.Text;

using (var db = new CourseDataContext())
{
    Student student = (
        from student in db.Students
        where student.StudentID == studentId
        select student).Single();

    stdInfo += string.Format("Student {0} {1}:\nTaking Courses:",
        student.FirstName, student.LastName);

    var courseNames =
        from taken in student.TakesCourses
        select taken.Course.CourseName;

    foreach (string courseName in courseNames)
    {
        stdInfo += string.Format("\nCourse: {0}", courseNames);
    }
}

MessageBox.Show(stdInfo);

Как вы увидите, он требует гораздо меньше кода и намного лучше показывает смысл кода.

...