Entity Framework Requête de jointure interne
Ce serait de la requête pour:
select s.* from Service s
inner join ServiceAssignment sa on sa.ServiceId = s.Id
where sa.LocationId = 1
dans l'entity framework?
C'est ce que j'ai écrit:
var serv = (from s in db.Services
join sl in Location on s.id equals sl.id
where sl.id = s.id
select s).ToList();
mais c'est faux. Peut quelqu'un me guide vers le chemin?
- Regardez-là : stackoverflow.com/questions/37324/...
- Vous êtes à l'aide de cession
=
au lieu de comparaison==
danswhere
clause. Aussi, vous n'avez pas besoin que si vous avez déjà rejoint sur le fait que les champs. - N'est-ce pas
where sl.id = s.id
redondant avec votre condition de jointure?
Vous devez vous connecter pour publier un commentaire.
Où
db
est votreDbContext
. Requête générée va ressembler (de l'échantillon pour EF6):List<Item> items = (..your code..).toList();
db.Services.Join(db.ServiceAssignments, s=>s.Id, sa=>sa.ServiceId, (s,sa)=> new{service = s, alert=sa}).Where(ssa=>ssa.alert.LocationId ==1).Select(ssa=>ssa.service);
Au cas où quelqu'un est intéressé par la Méthode de la syntaxe, si vous avez une propriété de navigation, c'est facile:
Si vous ne le faites pas, sauf si il y a quelques
Join()
remplacer, je suis pas d', je pense qu'il est assez ardu (et je suis une syntaxe de Méthode puriste):db.Services.Where(s=>s?.ServiceAssignment.LocationId == 1);
ou comme ça en C#5:db.Services.Where(s=>s.ServiceAssignment != null && s.ServiceAssignment.LocationId == 1);
Vous pouvez utiliser une propriété de navigation si son disponible. Il produit une jointure interne dans le SQL.