Usuário com melhor resposta
Problema ao retornar valor null do banco

Pergunta
-
Olá, estou novamente aqui para relatar meus problemas.
Estou fazendo uma consulta no banco ex:
IQueryable<caixa> lista = caixabo.Find(n => n.id_empresa == idempresa && n.status.Equals("A") && n.dt_cadastro == data);
e quando vou jogar um "Sum" desse resultado em variavel:
decimal debito = lista.Where(n => n.tipo.Equals("D")).Sum(n => n.valor);
esta dando erro pq nao tem valores no banco referente a esta condição, no sql posso usar o coalesce para retornar uma condição diferente de nulo, mas como posso fazer isso no linq?
Desde já agradeço.
- Movido Seilor Bonancio Junior segunda-feira, 23 de janeiro de 2012 12:20 (De:ASP.NET)
Respostas
-
Olá Thiago,
tente com LINQ, assim:
decimal debito = (from p in lista where p.tipo.Equals("D") select p.Valor ?? 0).Sum();
Neste exemplo eu te mostrei o comando ??, chamado null coalescing. Fazendo isso eu estou mandando retornar o Valor diferente de nulo ou 0.
Pedro Henrique B. Fernandes
MCTS - .NET Framework 4, Data Access
MCTS - .NET Framework 4, Web Applications
Site: pedrofernandes.net- Sugerido como Resposta José Eduardo Castro domingo, 22 de janeiro de 2012 23:35
- Marcado como Resposta Thiago_Porto segunda-feira, 23 de janeiro de 2012 23:43
Todas as Respostas
-
Thiago
tenda desta forma, acredito que possa resolver o seu problema
decimal debito = lista.Where(n => n.tipo.Equals("D")).Sum(n => n.valor== null ? 0 : convertTo.Int32(n.valor));
boa sorte ai amigão
Herbert Agles
Se a resposta contribuiu com a sua necessidade, não se esqueça de marcá-la, assim você beneficiará outros usuários. Sua dúvida também pode ser as de outros! -
continuo dando erro
The cast to value type 'Decimal' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
decimal debito = lista.Where(n => n.tipo.Equals("D")).Sum(n => n.valor == null ? 0 : n.valor);
se eu colocar da forma como vc me mandou da esse erro
LINQ to Entities does not recognize the method 'Int32 ToInt32(System.Decimal)' method, and this method cannot be translated into a store expression.
-
Declara a sua variavel DEBITO com aceitando null tambem.
EX: decimal? debito = null;
decimal? debito = lista.Where(n => n.tipo.Equals("D")).Sum(n => n.valor == null ? 0 : Convert.ToInt32(n.valor));eu escrevi errado nao é desta forma convertTo.Int32(n.valor)); mas sim desta forma Convert.ToInt32(n.valor));
nao esque de declarar a sua variavel aceitando valores null
veja a Sintax
decimal? debito = null;
Herbert Agles
Se a resposta contribuiu com a sua necessidade, não se esqueça de marcá-la, assim você beneficiará outros usuários. Sua dúvida também pode ser as de outros! -
Olá Thiago,
tente com LINQ, assim:
decimal debito = (from p in lista where p.tipo.Equals("D") select p.Valor ?? 0).Sum();
Neste exemplo eu te mostrei o comando ??, chamado null coalescing. Fazendo isso eu estou mandando retornar o Valor diferente de nulo ou 0.
Pedro Henrique B. Fernandes
MCTS - .NET Framework 4, Data Access
MCTS - .NET Framework 4, Web Applications
Site: pedrofernandes.net- Sugerido como Resposta José Eduardo Castro domingo, 22 de janeiro de 2012 23:35
- Marcado como Resposta Thiago_Porto segunda-feira, 23 de janeiro de 2012 23:43
-
aqui não deu certo, o que poderá ser?
no VS da essa mensagem:
Error 1 Operator ‘??’ cannot be applied to operands of type ‘decimal’ and ‘int’ C:\Sites em Desenvolvimento\EF.CasaPlacas\EF.CasaPlacas.Web\SaldoCaixa.aspx.cs 37 49 EF.CasaPlacas.Web