2016-07-01 16 views
-1

これは私のテーブルの外観です。Entity Frameworkで多対多のリストを作成する方法

enter image description here

そして、私のクラスは、私は彼の/ですべての学生を取得するためにLINQに、次のT-SQLをひそかする必要があり、私は二つのこと

A)が必要です。この

public partial class Student 
    { 
     public Student() 
     { 
      this.Courses = new HashSet<Course>(); 

     } 

     public int StudentId { get; set; } 
     public string StudentName { get; set; } 

     public virtual ICollection<Course> Courses { get; set; } 
    } 




    public partial class Course 
    { 
     public Course() 
     { 
      this.Students = new HashSet<Student>(); 
     } 

     public int CourseId { get; set; } 
     public string CourseName { get; set; } 

     public virtual ICollection<Student> Students { get; set; } 
    } 

のように見えます彼女のコース

Select Student.StudentName 
from Student 
inner join StudentCourse on Student.StudentId = StudentCourse.StudentId 
where StudentCourse.CourseId in(select Course.CourseId from Course where Course.CourseName ='C#') 

B)その結果をリストにマップする必要があります学生のタイプ

List<Student> StudentsWithCourses = new List<Student>(); 
+0

あなたは多くのことをする必要はありません...もし学生がコースを持っているなら、あなたは1人から複数人までのコースにすべての学生を入れることができます(学生のコース) – OrcusZ

+0

@OrcusZ返事ありがとうございます:) Canあなたはタイプの学生のリストにそれをどのようにマップすることができますか教えてください? – Lucia

+1

@OrcusZ weelもし1つのコースにもっと多くの学生が訪れることができ、1人の学生が(私が期待するように)たくさんのコースを訪れることができれば。 –

答えて

1

学生とコースの属性の間にある多対多の関係を把握するには、図にStudentCourseテーブルを追加する必要があります。関係データベースでは、多くの人から多くの人が避けてください。あなたはそのトピックのJoeの答えhereを読むことができます。

StudentCourseテーブルを追加すると、Entityフレームワークは、StudentとCourseの間の多対多のリンクとしてそのテーブルを識別し、そこに表示する目的を満たさないためERDから非表示にします。あなたの関係は と表示され、student*-----*courseとして視覚化されます。

StudentNamesと学生のCourseNames(あなたがEFにStudentCourseを追加した場合)を取得するには:

var list = db.Student.Select(a=>a.StudentName, a.Course.CourseName).ToList(); 

あなたが指定したT-SQLとしてレンダリングされます。

関連する問題