76

什么是查询:

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();

但这是错误的。有人可以引导我走上这条路吗?

4

3 回答 3

106
from s in db.Services
join sa in db.ServiceAssignments on s.Id equals sa.ServiceId
where sa.LocationId == 1
select s

dbDbContext. 生成的查询将如下所示(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
于 2013-04-15T22:04:13.760 回答
67

如果有人对 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);
于 2016-04-21T15:34:17.347 回答
8

如果可用,您可以使用导航属性。它在 SQL 中产生一个内连接。

from s in db.Services
where s.ServiceAssignment.LocationId == 1
select s
于 2014-09-17T16:07:19.063 回答