2016-12-16 9 views
1

私は学生の名前とコース名に2つのテーブルを持っています。彼らの間にはたくさんの関係があります。学習者の教訓をどのように引き出すのですか?私が書いたエンティティは以下の通りです。多対多リレーションシップテーブルは、コードファーストでデータを描画しますか?

public class Student 
{ 
     public Student() 
     { 
      Lessons = new HashSet<Lesson>(); 
     } 

     public int ID { get; set; } 
     public int MaxCredit { get; set; } 
     public int MemberID { get; set; } 
     public virtual Member Member { get; 
     public virtual ICollection<Lesson> Lessons { get; set; } 
} 

public class Lesson 
{ 
     public Lesson() 
     { 
      Students = new HashSet<Student>(); 
     } 

     public int ID { get; set; } 
     public string Name { get; set; } 
     public int LessonCredit { get; set; } 
     public virtual ICollection<Student> Students { get; set; } 
} 

私は学生のレッスンを取得しようとしました:

uow.LessonRepository.GetALL().Where(x=> x.Students.Any(s=> s.MemberID==id)) 

が、それは私にキャストエラーを与えました。

+0

あなたはそれを持っているようです。そのコードではうまくいかないのですか? – BradleyDotNET

+0

たとえば、student xのレッスンを受けたい場合は、どうすればよいですか? –

+0

'Student'オブジェクトの' Lessons'プロパティにアクセスするだけです。それは動作しませんか? – BradleyDotNET

答えて

1

あなたのEFモデルは正しいですが、多対多の関係を行うには、両側にvirtual ICollection<T>の他のタイプがあります。

あなたはそれを解析し、学生の教訓を取得したい場合、我々はLessonRepository(おそらくIEnumerable<Lesson>)で始まり、その後、ダウンコレクションをフィルタリングすることでWhereを行うのにあなたのクエリは右ではありません。これまでのところとても良い(レッスンから始まって少し奇妙ですが、何でも)。条件は(英語で)MemberIdの "id"と一致する学生がいるところです(どこから来たものか)。それがあなたに何を与えるだろうが、それは学生の教訓ではありません。

既にナビゲーションプロパティがあるので、特定の生徒オブジェクトのLessonsプロパティにアクセスすることができます。正しい学生項目の

Students.FirstOrDefault(s => s.Id == id)?.Lessons; 

FirstOrDefault検索して、あなただけのLessonsプロパティにアクセス:あなたは学生証でのようなものを開始したと仮定。

関連する問題