具有子查询和左联接的LINQ

具有子查询和左联接的LINQ,linq,subquery,ef-core-2.1,Linq,Subquery,Ef Core 2.1,我正在尝试编写LINQ查询来生成下面的SQL查询。我知道它看起来像赋值,但尝试了一些语法,产生了错误的查询 select pm.Profile_Number,PD.Line_Abbrev,PD.Group_Code from Profile_Detail PD INNER JOIN Profile_Master PM ON pd.profile_id = pm.profile_id LEFT JOIN ( SELECT Field_Abbr,Group_Code FROM vw_Gro

我正在尝试编写LINQ查询来生成下面的SQL查询。我知道它看起来像赋值,但尝试了一些语法,产生了错误的查询

select pm.Profile_Number,PD.Line_Abbrev,PD.Group_Code from Profile_Detail PD
INNER JOIN  Profile_Master PM ON pd.profile_id = pm.profile_id
LEFT JOIN
(
    SELECT Field_Abbr,Group_Code FROM vw_Group_Code
    where ((US=1 AND Group_US_Obsolete <> 1) OR (CA=1 AND Group_CA_Obsolete <> 1) OR (MX=1 AND Group_MX_Obsolete <> 1))

)gcv ON PD.Line_Abbrev = gcv.Field_Abbr AND PD.Group_Code = gcv.Group_Code
WHERE PD.Profile_Id IN(42) AND gcv.Field_Abbr IS NULL

请为您的Linq发布生成的SQL查询。可能EF core不支持在右连接上使用子查询作为邮件查询中的where条件。如果您脑子里有一个特定的SQL语句,并且您正在努力使用Linq生成它。然后忘记LINQ,执行您想要运行的查询。林克的存在是为了让你的生活更轻松,而不是成为一个障碍。
(from pd in _context.ProfileDetail
                                                           join pm in _context.ProfileMaster on pd.ProfileId equals pm.ProfileId
                                                           join vla in _context.VwLineAbbrvs on pd.LineAbbrev equals vla.LineAbbrev into gc
                                                           from vla in gc.DefaultIfEmpty()
                                                           where profileNumber.Contains(pd.ProfileId.ToString()) &&
                                                           ((vla.IsUS && vla.USObsolete) || (vla.IsCA && !vla.CAObsolete) || (vla.IsMX && !vla.MXObsolete))
                                                           select new ObsoleteLineDetail
                                                           {
                                                               LineAbbrv = pd.LineAbbrev,
                                                               GroupCode = pd.GroupCode,
                                                               ProfileNumber = pm.ProfileNumber
                                                           }).ToList();