Запрос Entity Framework для внутреннего соединения
что бы запрос для:
select s.* from Service s
inner join ServiceAssignment sa on sa.ServiceId = s.Id
where sa.LocationId = 1
в entity framework?
вот что я написал:
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();
но это неправильно. Может ли кто-нибудь указать мне путь?
3 ответа:
from s in db.Services join sa in db.ServiceAssignments on s.Id equals sa.ServiceId where sa.LocationId == 1 select s
здесь
db
вашDbContext
. Сгенерированный запрос будет выглядеть так (пример для EF6):SELECT [Extent1].[Id] AS [Id] -- other fields from Services table FROM [dbo].[Services] AS [Extent1] INNER JOIN [dbo].[ServiceAssignments] AS [Extent2] ON [Extent1].[Id] = [Extent2].[ServiceId] WHERE [Extent2].[LocationId] = 1
в случае, если кто-то заинтересован в синтаксисе метода, если у вас есть свойство навигации, это очень просто:
db.Services.Where(s=>s.ServiceAssignment.LocationId == 1);
Если вы этого не сделаете, если нет некоторых
Join()
переопределение я не знаю, я думаю, что это выглядит довольно грубо (и я метод синтаксис пурист):db.Services.Join(db.ServiceAssignments, s => s.Id, sa => sa.ServiceId, (s, sa) => new {service = s, asgnmt = sa}) .Where(ssa => ssa.asgnmt.LocationId == 1) .Select(ssa => ssa.service);