は、私は、次の表エンティティフレームワークに左結合を含めることは可能ですか?
- 教室(のClassID、クラス名)
- StudentClass(StudentID、のClassID)
- 学生(StudentID、StudentName、等。)
- StudentDescriptionを持っています。 (StudentDescriptionID、StudentID、StudentDescription)
は私がBELOWような何かをし、学生に関するすべての情報を得るでしょうSQLで学生== 1
上のすべての情報を取得します。
select * from Student s
join StudentClass sc on s.StudentID=sc.StudentID
join ClassRoom c on sc.ClassID=c.ClassID
left join StudentDescription sd on s.StudentID=sd.StudentID
where s.StudentID=14
私の問題。EF4を使用して、私はこのようなことをしましたが、動作させることはできません。あなたは私がここでやっているものを知らない見ることができるように はまた、あなたには、左は
試み1
private static StudentDto LoadStudent(int studentId)
{
StudentDto studentDto = null;
using (var ctx = new TrainingContext())
{
var query = ctx.Students
.Include("ClassRooms")
.Include("StudentDescriptions")
.Where(x=>x.StudentID==studentId)
.SingleOrDefault();
studentDto = new StudentDto();
studentDto.StudentId = query.StudentID;
studentDto.StudentName = query.StudentName;
studentDto.StudentDescription = ??
}
return studentDto;
}
試み2再び不完全で、間違った
using (var ctx = new TrainingContext())
{
var query = (from s in ctx.Students
.Include("ClassRooms")
join sd in ctx.StudentDescriptions on s.StudentID equals sd.StudentID into g
from stuDesc in g.DefaultIfEmpty()
select new
{
Name=s.StudentName,
StudentId=s.StudentID,
}).SingleOrDefault();
に参加しないことができます。 SqlをEFクエリに変換するにはどうすればよいですか?
あなたの時間と返信に感謝します。しかし、最初のものはクロスジョイントを生成します。私は全く間違っているかもしれませんが、2つの場合はクロスジョイントを生成しませんか? – user9969
私はこの声明を理解していませんでした: "まず、LEFT OUTER JOINを含めます。"私が言うことができる限り、インクルードはINNER JOINを実行します。 – Dror
いいえ、 '' .Include''はOUTER JOINを行います。空の(存在しない)プロパティを含めると、元のものが返されます。 –