Usuário com melhor resposta
Duvida numa Linq query

Pergunta
-
Eu tenho um codigo assim
cartItems.Count eh tipo int
public int GetCount()
{
// Get the count of each item in the cart and sum them up
int? count = (from cartItems in storeDB.Carts
where cartItems.CartId == ShoppingCartId
select (int?)cartItems.Count).Sum();
// Return 0 if all entries are null
return count ?? 0;
}
Eu tava testando o codigo e se eu tirar o (int?) o compilador aceita mas da problema na
execucao se o resultado da pesquisa for nulo.
O que eu quero saber eh se da erro porque cartItems.Count tem que ser nullable ou se tem alguma coisa a ver
com a funcao Sum . Eu nao entendi o erro
thx
Anderson
Respostas
-
Ola anderson,
o erro acontece porque em algum monento vc tem um registro carItems nulo ... voce não pode usar a propriedade Count em um objeto nulo...
faça primeiro a verificação se a sua consulta retorna algum registro antes de tentar somar eles...
public int GetCount() { var query = from cartItems in storeDB.Carts where cartItems.CartId == ShoppingCartId select cartItems.Count; if (query.Any() == false) return 0; return query.Sum(); }
Microsoft Community Contributor
- Editado Rui SantosModerator quinta-feira, 6 de setembro de 2012 19:58
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:27
-
Oi...
O erro ocorre porque vc não pode somar os registro de uma tabela sem registros (vazia). Você não pode somar um valor null pq ele não tem valor.
Por isso que primeiro eu usei o Any() para verificar se existem registros referentes a sua consulta, para somente depois, e se existir, executar a soma desses valores.
Microsoft Community Contributor
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:27
-
Oi Anderson,
o Cast funciona se exisitirem registros na base... a Funcão Sum consegue somar int? se tiverem int? para serem somados...
em outras palavar.. ela ate consegue somar "null + null + 1 = 1"
o problema é quando não existe nenhum registro... não quando existe um registro null... o pau ocorre porque não tem nada a ser somado... entede ?
Microsoft Community Contributor
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:27
Todas as Respostas
-
Ola anderson,
o erro acontece porque em algum monento vc tem um registro carItems nulo ... voce não pode usar a propriedade Count em um objeto nulo...
faça primeiro a verificação se a sua consulta retorna algum registro antes de tentar somar eles...
public int GetCount() { var query = from cartItems in storeDB.Carts where cartItems.CartId == ShoppingCartId select cartItems.Count; if (query.Any() == false) return 0; return query.Sum(); }
Microsoft Community Contributor
- Editado Rui SantosModerator quinta-feira, 6 de setembro de 2012 19:58
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:27
-
cara eu testei esse codigo seu e deu certo. O problema me parece entao que o erro acontece no uso da funcao Sum . Eu tenho que definir explicitamente o elemento como nulable pra deixar claro pra funcao Sum que ela tera q lidar com elementos nulable.
-
Oi...
O erro ocorre porque vc não pode somar os registro de uma tabela sem registros (vazia). Você não pode somar um valor null pq ele não tem valor.
Por isso que primeiro eu usei o Any() para verificar se existem registros referentes a sua consulta, para somente depois, e se existir, executar a soma desses valores.
Microsoft Community Contributor
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:27
-
-
Oi Anderson,
o Cast funciona se exisitirem registros na base... a Funcão Sum consegue somar int? se tiverem int? para serem somados...
em outras palavar.. ela ate consegue somar "null + null + 1 = 1"
o problema é quando não existe nenhum registro... não quando existe um registro null... o pau ocorre porque não tem nada a ser somado... entede ?
Microsoft Community Contributor
- Marcado como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator segunda-feira, 1 de outubro de 2012 12:27