如何在LeftJoinwithLinq中使用IN子句



我正在重构一个系统,在遗留系统中,有一个查询,脚本的一部分在左联接中是这样的:

LEFT JOIN solucoes.sleccecentro_custo_empresa cce ON     
cce.cod_centro_custo_empresa in (                                    
cli.cod_centro_custo_empresa,      
cdt.cod_centro_custo_empresa,      
emu.cod_centro_custo_empresa,      
vei.cod_centro_custo_empresa       
)                                   
AND cce.cod_empresa_convenio = caa.cod_empresa_convenio 

我将sql转换为linq,这部分代码如下所示:

join ccemp in Context.Set<CentroCustoEmpresasEntity>()
on
new
{
c1 = cli.IdCentroCustoEmpresa,
c2 = cond.IdCentroCustoEmpresa,
c3 = empu.IdCentroCustoEmpresa,
c4 = veic.IdCentroCustoEmpresa,
c5 = carg.EmpresaConveniadaId
}
equals new
{
c1 = ccemp.Id,
c2 = ccemp.Id,
c3 = ccemp.Id,
c4 = ccemp.Id,
c5 = ccemp.IdEmpresaConvenio
}
into
CentroCustoEmpresasGroup
from
ccemp in CentroCustoEmpresasGroup.DefaultIfEmpty()

问题是我可以得到一个结果,但它与SQL不同。我想建议一下如何在左加入内部与IN合作,我试图找到一些东西,但没有成功!

非常感谢!

JOIN可以用SelectMany表示,查看原始文档:Complex Query Operators。您可以使用OR而不是IN

...
from ccemp in Context.Set<CentroCustoEmpresasEntity>()
.Where(ccemp => 
cli.IdCentroCustoEmpresa  == ccemp.Id ||
cond.IdCentroCustoEmpresa == ccemp.Id ||
empu.IdCentroCustoEmpresa == ccemp.Id ||
veic.IdCentroCustoEmpresa == ccemp.Id ||
carg.EmpresaConveniadaId  == ccemp.Id
)
.Where(ccemp => carg.EmpresaConveniadaId == ccemp.IdEmpresaConvenio)
.DefaultIfEmpty()
...

相关内容

  • 没有找到相关文章

最新更新