나는 다음 표엔티티 프레임 워크가 왼쪽 조인을 포함 할 수 있습니까?
- 교실 (ClassID가, 클래스 이름)
- StudentClass (StudentID, ClassID가)
- 학생 (StudentID, StudentName, 기타 ..)
- StudentDescription 있습니다. (StudentDescriptionID, StudentID, StudentDescription)
은 내가 아래처럼 뭔가를하고 학생에 대한 모든 정보를 얻을 것이다 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 쿼리로 변환하려면 어떻게해야합니까?
시간과 답례에 감사드립니다. 예제가 포함됩니다! 그러나 첫 번째 교차 결합을 생산하고 있습니다. 나는 완전히 틀릴 수도 있지만 당신이 그것을 할 때 그것은 교차 결합을 생산하지 않습니다? – user9969
나는이 진술을 이해하지 못했다 : "첫째,. 포함하는 것은 LEFT OUTER JOIN을 포함한다". 내가 말할 수있는 한, INCLUDE는 INNER JOIN을 수행한다. – Dror
아니요,''.Include''는 OUTER JOIN을합니다. 비어있는 (존재하지 않는) 속성을 포함 시키면 원래의 속성은 여전히 반환됩니다. –