-1

我正在尝试在 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,表示没有状态为“Alocados”的“Trabalhos”,则查询返回 NullException,因此无法执行 sum(t => t.Quantidade - t.QuantidadeProduzida)。

我怎样才能使它工作?

4

1 回答 1

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意味着,如果总和返回 null,则我们将值设为 0。

谢谢你们 !

于 2013-01-22T21:27:04.227 回答