将sql Case When语句转换为LINQ
本文关键字:转换 LINQ 语句 When sql Case | 更新日期: 2023-09-27 18:26:44
如何在LINQ中执行此CASE WHEN
语句?
SELECT c.nm_grupo, c.cd_grupo, YEAR(GETDATE()),
CASE WHEN (
SELECT SUM(p.valor)
FROM ind_receita p
JOIN ind_equipto o ON p.cd_equipto = o.cd_equipto
JOIN ind_grupo c2 ON o.cd_grupo = c2.cd_grupo
WHERE c2.cd_grupo = c.cd_grupo
AND YEAR(p.dt_emissao) = YEAR(GETDATE())
)
IS NULL THEN 0 ELSE
(
SELECT SUM(p.valor)
FROM ind_receita p
JOIN ind_equipto o ON p.cd_equipto = o.cd_equipto
JOIN ind_grupo c2 ON o.cd_grupo = c2.cd_grupo
WHERE c2.cd_grupo = c.cd_grupo
AND YEAR(p.dt_emissao) = YEAR(GETDATE())
)
END AS valor
FROM ind_grupo c
ORDER BY c.nm_grupo
我的TRY
// SELECT * FROM IND_GRUPO IN LINQ
var GetAllGroups = (from c in _repositorio.GetGrupoEquipamentos()
select c);
// THE SAME SUBQUERY IN LINQ
var MySubQuery= (from p in _repositorio.GetReceitas()
join o in _repositorio.GetEquipamentos() on p.CodigoEquipamento.Equipamento_Id equals o.Equipamento_Id
join a in _repositorio.GetGrupoEquipamentos() on o.CodigoGrupo.Grupo_Id equals a.Grupo_Id
where p.DataHoraCriacaoRegistro.Year == DateTime.Now.Year
&& a.Grupo_Id == GetAllGroups.Select(a => a.Grupo_Id)
select p.Valor).Sum();
首先,让我们从SQL中删除CASE
:它可以替换为ISNULL
函数:
SELECT
c.nm_grupo
, c.cd_grupo
, YEAR(GETDATE())
, ISNULL((
SELECT SUM(p.valor)
FROM ind_receita p
JOIN ind_equipto o ON p.cd_equipto = o.cd_equipto
JOIN ind_grupo c2 ON o.cd_grupo = c2.cd_grupo
WHERE c2.cd_grupo = c.cd_grupo
AND YEAR(p.dt_emissao) = YEAR(GETDATE())
)
, 0) AS valor
FROM ind_grupo c
ORDER BY c.nm_grupo
现在让我们将其转换为LINQ:
var GetAllGroups = _repositorio
.GetGrupoEquipamentos()
.Select(c => new {
c.nm_grupo // Use C# fields that you mapped to these fields in DB
, c.cd_grupo // Same as above
, valor = (from p in _repositorio.GetReceitas()
join o in _repositorio.GetEquipamentos() on p.CodigoEquipamento.Equipamento_Id equals o.Equipamento_Id
join a in _repositorio.GetGrupoEquipamentos() on o.CodigoGrupo.Grupo_Id equals a.Grupo_Id
where c.Grupo_Id == a.Grupo_Id && p.DataHoraCriacaoRegistro.Year == DateTime.Now.Year
select (decimal?)p.Valor).Sum() ?? 0
});
注意将p.Valor
强制转换为可为null的decimal
。如果需要其他类型,请根据需要替换此强制转换。