.net core 实体框架-多列上的LeftJoin

.net core 实体框架-多列上的LeftJoin,.net-core,entity-framework-core,.net Core,Entity Framework Core,我试图用C语言编写一个使用Lambda表达式的左连接查询 当联接表中有筛选器时,如何获取所需的SQL查询 我的意思是没有子查询,对“on”语句进行多次验证 公共类文章 { 公共int Id{get;set;} 公共字符串ArticleName{get;set;} //EF导航属性 公共ICollection UserArticleNames{get;set;} } 公共类用户 { 公共int Id{get;set;} 公共字符串用户名{get;set;} } 公共类用户名 { //FK用户 pu

我试图用C语言编写一个使用Lambda表达式的左连接查询

当联接表中有筛选器时,如何获取所需的SQL查询

我的意思是没有子查询,对“on”语句进行多次验证

公共类文章 { 公共int Id{get;set;} 公共字符串ArticleName{get;set;} //EF导航属性 公共ICollection UserArticleNames{get;set;} } 公共类用户 { 公共int Id{get;set;} 公共字符串用户名{get;set;} } 公共类用户名 { //FK用户 public int UserId{get;set;} //FK文章 公共int ArticleId{get;set;} public int UserArticleName{get;set;} } EF-通过导航属性进行LINQ查询:为用户获取文章

var join=context.Articles .SelectManya=>a.UserArticleNames .Whereua=>ua.UserId==1 .DefaultIfEmpty,a,ua=>新建{ Id=a.Id, ArticleName=a.ArticleName, UserArticleName=ua.UserArticleName, } ; 生成的SQL代码:

选择[a].[Id], [a.ArticleName], [ua].[UserArticleName] 来自[dbo].[Articles]作为[a] 左连接 选择[a0].[UserId], [a0].[ArticleId], [a0]。[UserArticleName], 来自[dbo]。[UserArticleName]作为[a0] 其中[a0].[UserId]=1 作为[a].[Id]=[ua].[Id]上的[ua] 想要的SQL代码:

选择[a].[Id], [a.ArticleName], [ua].[UserArticleName] 来自[dbo].[Articles]作为[a] 以[ua]的身份左加入[dbo].[UserArticleName] 在[a].[Id]=[ua].[Id]和[ua].[UserId]=1上
这就是你想要的吗?如果是这样的话,您可能会将此问题作为一个重复问题来结束。如果这不是你需要的,也许给出不孤立问题的原因。这就是目前EF核心如何使用附加过滤器扩展导航的方式。这两个SQL查询是等价的,有什么问题吗?一般来说,消除内联子查询不是EF核心查询转换问题-sql查询优化器应该能够做到这一点,这是他们的工作。我认为,如果导航属性设置正确,您可以执行类似于var join=context.UserArticleNames.Includex=>x.Article的操作,并获得所需的结果。我不确定实际的SQL是什么样子,但这将返回您所有的用户文章,并访问每个用户文章的文章信息。@cardi Demanaco jr您建议的方法将只返回UserArticleName表中带有链接的文章。我需要所有文章,但根据请求中提供的userId使用不同的UserArticleName值