我试图在sql中执行以下查询:
select r.*,
(select SUM(c.quantidade - c.quantidadeproduzida)
from pcp_trabalho c
where c.id_recurso = r.id_recurso
and c.st_trabalho = 1) alocado,
(select SUM(c.quantidade - c.quantidadeproduzida)
from pcp_trabalho c
where c.id_recurso = r.id_recurso
and c.st_trabalho = 2) programado
from pcp_recurso r
st_trabalho是我项目中的一个枚举。
我试过了:
rv = (from r in SessionManager.GetSession().Query<RecursoCorteCircuito>()
select new RecursoView
(
r,
SessionManager.GetSession().Query<TrabalhoCorteCircuito>().Where(t => t.Recurso.Id == r.Id && t.Status == TrabalhoStatus.Alocado).Sum(t => t.Quantidade - t.QuantidadeProduzida),
SessionManager.GetSession().Query<TrabalhoCorteCircuito>().Where(t => t.Recurso.Id == r.Id && t.Status == TrabalhoStatus.Programado).Sum(t => t.Quantidade - t.QuantidadeProduzida)
)).ToList();
但是,例如,如果SessionManager.GetSession().Query<TrabalhoCorteCircuito>().Where(t => t.Recurso.Id == r.Id && t.Status == TrabalhoStatus.Alocado)
返回nothing
,则意味着没有&#34; Trabalhos&#34;状态&#34; Alocados&#34;,查询返回NullException,因此它不能执行总和(t =&gt; t.Quantidade - t.QuantidadeProduzida)。
我怎样才能让它发挥作用?
答案 0 :(得分:0)
我设法解决了我的问题。我就这样做了:
SessionManager.GetSession().Query<TrabalhoCorteCircuito>().Where(t => t.Recurso.Id == r.Id && t.Status == TrabalhoStatus.Alocado).Sum((int?)t => t.Quantidade - t.QuantidadeProduzida) ?? 0,
SessionManager.GetSession().Query<TrabalhoCorteCircuito>().Where(t => t.Recurso.Id == r.Id && t.Status == TrabalhoStatus.Programado).Sum((int?)t => t.Quantidade - t.QuantidadeProduzida)?? 0
简要说明:
Sum((int?)t => t.Quantidade - t.QuantidadeProduzida) ?? 0
当我放(int?)
时,编译器让我们得到总和的空值,而?? 0
意味着,如果sum返回null,那么我们将值0。
谢谢大家!