none
Duvida numa Linq query RRS feed

  • 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


    quinta-feira, 6 de setembro de 2012 17:38

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


    quinta-feira, 6 de setembro de 2012 19:57
    Moderador
  • 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

    sexta-feira, 7 de setembro de 2012 03:27
    Moderador
  • 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

    segunda-feira, 24 de setembro de 2012 00:32
    Moderador

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


    quinta-feira, 6 de setembro de 2012 19:57
    Moderador
  • 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.
    quinta-feira, 6 de setembro de 2012 23:31
  • 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

    sexta-feira, 7 de setembro de 2012 03:27
    Moderador
  • mas tipo.

    Se eu converter explicitamente (int?)cartItems.Count da pra usar a funcao Sum mesmo que a tabela seja vazia. Ocorre o erro no Sum somente se eu deixar de converter.

    sexta-feira, 7 de setembro de 2012 03:39
  • 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

    segunda-feira, 24 de setembro de 2012 00:32
    Moderador