2017-09-01 7 views
0

私は、述語ビルダを使用して結合したい2つのテーブルを持っています。 擬似コードでは、StudentLastName = "Smith"のStudentIdのStudentと結合して、すべてのStudentSchedule行を返したいとします。述語ビルダを使用してテーブルを結合しようとしています

public class Student 
{ 
    int StudentId {get;set;} 
    string StudentFirstName {get;set;} 
    string StudentLastName {get;set;} 
} 
class StudentSchedule 
{ 
    int StudentScheduleId 
    int StudentId 
    string ClassName 
} 

私は1つのエンティティのためだけの微

var studentBuilder = PredicateBuilder.True<Student>(); 

studentBuilder = studentBuilder.And(Student => Student.StudentId == studentId); 

var students = context.Students.Where(studentBuilder).ToList(); 
+0

これに対して、Predicate Builderを使用しているのはなぜですか?確かに、標準クエリを使用してこれを行うことはできますか? – Alex

+0

そして、StudentとStudentScheduleの関係は何ですか?それは1対1の関係ですか? – Alex

+0

Alas Predicatebuilderは私と一緒に作業しなければならないものです。この場合、学生は複数のStudentSchedulesを持つことができます。 –

答えて

1

を行うことができますそして、あなたはこのような何かにあなたのモデルを変更する必要があります

public class Student 
{ 
    public int StudentId {get;set;} 
    public string StudentFirstName {get;set;} 
    public string StudentLastName {get;set;} 
    public virtual ICollection<StudentSchedule> StudentSchedules {get;set;} 
} 
class StudentSchedule 
{ 
    public int StudentScheduleId {get;set;} 
    public int StudentId {get;set;} 
    public string ClassName {get;set;} 
    public virtual Student Student {get;set;} 
} 

を次に、あなたのクエリは次のようになります。

var students = db.Students 
    .Include(s=>s.StudentSchedules) 
    .Where(studentBuilder) 
    .ToList(); 

述語bなしuilder:私の個人的な好みは、それは外部の財産でない限りプロパティでエンティティタイプを繰り返さないことですので、私のモデルは、このようなものだ

var students = db.Students 
    .Include(s=>s.StudentSchedules) 
    .Where(s=>s.StudentLastName == "Smith") 
    .ToList(); 

:もちろん

public class Student 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public virtual ICollection<StudentSchedule> Schedules {get;set;} 
} 
class StudentSchedule 
{ 
    public int Id {get;set;} 
    public int StudentId {get;set;} 
    public string ClassName {get;set;} 
    public virtual Student Student {get;set;} 
} 

あなたがもっと欲しいかもしれません"科目"(名前、前提条件など)、 "クラス"(科目、教室、スケジュール、スタッフ)、 "学生"(姓、名字、クラス)、 "スタッフ"(姓、名字、JobTitle 、クラス)と "スケジュール"(曜日、開始時間、終了時間、クラス)

関連する問題