0

我在使用实体框架v6将T-SQL查询转换为linq时遇到了一些麻烦。实体框架加入多对多

我工作的T-SQL查询看起来是这样的:

SELECT 
    [Person].*, [Person_Firm_PersonResponsibility].* 
FROM 
    [Person] 
JOIN 
    [Person_Firm_PersonResponsibility] ON [Person].ID = [Person_Firm_PersonResponsibility].PersonID 
WHERE 
    [Person_Firm_PersonResponsibility].FirmID = 389 
    AND [Person].ID = 330 

在LINQ我有以下几点:

using (var ctx = new MyContext()) 
{ 
    var result = (from p in ctx.People 
        join r in ctx.Person_Firm_PersonResponsibility on p.ID equals r.PersonID 
        where r.FirmID == firmId && p.ID == personId 
        select p) 
       .Include("Person_Firm_PersonResponsibility.PersonResponsibility") 
       .Include("Person_Firm_PersonResponsibility") 
       .FirstOrDefault(); 

    return result; 
} 

我的目标是只得到与责任特定人的特定公司(公司ID)公司,人员和责任之间的关系是我所查询的多对多Person_Firm_PersonResponsibility表。

查询“有效”的意思是我得到了这个人,但它包括他/她对于任何公司的所有责任,而不是具体公司(firmId)我试过删除.Include(“ ),但那并没有。

有谁知道如何做到这一点?

+0

没有我的回答解决问题了吗? – 2014-11-11 09:56:30

+0

对不起,延迟时间太长了,Steve:(是的,它的确解决了我的问题,非常感谢!:-) – 2014-12-02 07:51:53

回答

0

试试这个:

from p in Persons 
join r in Person_Firm_PersonResponsibilities 
    on p.ID equals r.PersonId 
where (r.FirmId == 389 && p.ID == 330) 
select new {p, r} 

使用LinqPad测试,显示相应的SQL作为福利:

-- Region Parameters 
DECLARE @p0 Int = 389 
DECLARE @p1 Int = 330 
-- EndRegion 
SELECT [t0].[ID], [t0].[Name], [t1].[FirmId], [t1].[PersonId] 
FROM [Person] AS [t0] 
INNER JOIN [Person_Firm_PersonResponsibility] AS [t1] ON ([t0].[ID]) = [t1].[PersonId] 
WHERE ([t1].[FirmId] = @p0) AND ([t0].[ID] = @p1)