J'ai les tableaux ci-dessousEntity Framework include avec la jointure gauche est-ce possible?
- Classroom (CLASSID ClassName)
- StudentClass (StudentID, ClassID)
- étudiants (StudentID, StudentName, Etc ..)
- StudentDescription. (StudentDescriptionID, StudentID, StudentDescription)
Je veux récupérer toutes les informations sur les étudiants == 1
Dans sql je ferais quelque chose comme ci-dessous et obtenir toutes les informations sur un étudiant. Maintenant, mon problème.En utilisant EF4 j'ai fait quelque chose comme ça, mais je ne peux pas le faire fonctionner. pouvez-vous faire également un include et une jointure gauche
tentative 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;
}
tentative 2 fois incomplète et erronée
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();
Comme vous pouvez le voir, je ne sais pas ce que je fais ici. Comment puis-je convertir ce Sql en une requête EF?
merci pour votre temps et réponse. L'exemple d'inclusion fonctionne! cependant le premier produit une jointure croisée. Je pourrais être totalement faux mais quand vous faites 2 froms doesnt produit une jointure croisée? – user9969
Je n'ai pas compris cette déclaration: "Tout d'abord, .Include fait une jointure gauche,". Pour autant que je peux dire .Include effectue une INNER JOIN. – Dror
Non, '' .Include'' fait un OUTER JOIN. Si vous incluez une propriété qui se trouve être vide (pas là), l'original est toujours retourné. –