簡體   English   中英

內部聯接的實體框架查詢

[英]Entity Framework Query for inner join

什么是查詢:

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

但這是錯的。 有人可以指導我走這條路嗎?

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

如果有人對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);

如果可用,您可以使用導航屬性。 它在SQL中生成內部聯接。

from s in db.Services
where s.ServiceAssignment.LocationId == 1
select s

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM