У меня есть следующие таблицы
- ClassRoom (ClassID, ClassName)
- StudentClass (StudentID, ClassID)
- Студент (StudentID, StudentName, Etc..)
- StudentDescription. (StudentDescriptionID, StudentID, StudentDescription)
Я хочу получить всю информацию об ученике == 1
В sql я бы сделал что-то вроде НИЖЕ и получал всю информацию о студенте.
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?