查询的内容是什么:
select s.* from Service s
inner join ServiceAssignment sa on sa.ServiceId = s.Id
where sa.LocationId = 1
在实体框架中?
这就是我写的:
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();
但这是错的。有人可以指导我走这条路吗?
答案 0 :(得分:85)
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
答案 1 :(得分:45)
如果有人对Method语法感兴趣,如果你有导航属性,那就很容易了:
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);
答案 2 :(得分:6)
如果可用,您可以使用导航属性。它在SQL中生成内部联接。
from s in db.Services
where s.ServiceAssignment.LocationId == 1
select s