2010-07-18 5 views
0

J'ai un ensemble de données qui contient des tables d'une base de données universitaire, deux (en fait plus) de ces tables contiennent une relation plusieurs à plusieurs, spécifiquement j'ai a,Naviguer dans une relation Tableaux plusieurs-à-plusieurs dans un ensemble de données (Optimisation)

étudiants tableau (contient des informations sur les élèves) cours Table (contient des informations sur les cours) TakesCourses tableau (ce qui est une table intermédiaire entre les étudiants et Cours tables, chaque étudiant peut avoir de nombreux cours)

Je veux entrer un « ID étudiant » et aller chercher tous les enregistrements des cours tableau selon les documents trouvés dans TakesCourses de table.

Mon code WORKS et il est comme suit:

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); 

Ma question est, comment puis-je optimiser le code après les commentaires? est-il une meilleure façon d'écrire cela?

(Note: Je suis un développeur récupérais, en essayant de rafraîchir mes compétences)

Répondre

0

Je suis totalement d'accord avec JDoig Voici un exemple de la façon dont votre code pourrait ressembler tout en utilisant 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); 

comme vous le verrez, il prend beaucoup moins de code et fait un bien meilleur travail pour montrer l'intention du code

+0

Merci pour les commentaires, comme je l'ai dit je vais travailler sur Linq API dès demain. –

1

Si la version du framework .NET que vous utilisez (ou en mesure d'utiliser en fonction du projet) soutient LINQ2SQL I HAUTEMENT Nous vous recommandons de prendre le temps d'apprendre LINQ car il vous rendra la vie mille fois plus facile à la fois avec SQL et avec le langage .NET.

En ce jour et l'âge j'éviter car il est souvent puni en ligne SQL à moins que c'est votre seule station, par la mort dans la plupart des établissements:.. ¬ (

+0

« n ce jour et l'âge j'éviterais SQL en ligne à moins que ce soit votre seul recours, car il est souvent punissable par la mort dans la plupart des établissements: ¬ ( C'est une vision morbide et involontaire! : D En fait, je prévoyais d'entrer dans l'API LINQ demain, puisque j'apprends le framework 3.5 .Net. Merci pour les retours, merci beaucoup. –

Questions connexes