Entity Framework Query for inner join

后端 未结 3 1555
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-12 19:22

What would be the query for:

select s.* from Service s 
inner join ServiceAssignment sa on sa.ServiceId = s.Id
where  sa.LocationId = 1

in

相关标签:
3条回答
  • 2020-12-12 20:07

    You could use a navigation property if its available. It produces an inner join in the SQL.

    from s in db.Services
    where s.ServiceAssignment.LocationId == 1
    select s
    
    0 讨论(0)
  • 2020-12-12 20:15
    from s in db.Services
    join sa in db.ServiceAssignments on s.Id equals sa.ServiceId
    where sa.LocationId == 1
    select s
    

    Where db is your DbContext. Generated query will look like (sample for 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
    
    0 讨论(0)
  • 2020-12-12 20:21

    In case anyone's interested in the Method syntax, if you have a navigation property, it's way easy:

    db.Services.Where(s=>s.ServiceAssignment.LocationId == 1);
    

    If you don't, unless there's some Join() override I'm unaware of, I think it looks pretty gnarly (and I'm a Method syntax purist):

    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);
    
    0 讨论(0)
提交回复
热议问题