【问题标题】:Entity Framework join many to many实体框架加入多对多
【发布时间】:2014-11-05 12:23:38
【问题描述】:

我在使用 Entity Framework 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("") ,但没有这样做。

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

【问题讨论】:

  • 我的回答解决了你的问题吗?
  • 抱歉(太长了)延迟,Steve :-( 是的,它确实解决了我的问题。非常感谢!:-)

标签: sql-server entity-framework linq-to-entities relational-database


【解决方案1】:

试试这个:

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)

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多