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)