我正在重构一个系统,在遗留系统中,有一个查询,脚本的一部分在左联接中是这样的:
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()
...