-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?)、コンパイラは合計にnull値を設定します?? 0。つまり、合計がnullを返す場合は、値0を入力します。

皆さん、ありがとうございました !

于 2013-01-22T21:27:04.227 に答える