none
Consulta Linq que funcionava no Visual Studio 2012 não funciona no Visual Studio 2013. RRS feed

  • Pergunta

  • Olá a todos,

    Tenho um aplicação desenvolvida usando Visual Studio 2012 + Framework 4.5 + Entity Framework 5.0.0 + BD MySQL.

    Está mesma aplicação migrei para Visual Studio 2013 + Framework 4.5.1 + Entity Framework 6.1.0 + BD MySQL.

    A Aplicação funciona perfeitamente, a não ser por uma consulta Linq que é usada para gerar um relatório que parou de funcionar. Segue abaixo o código da mesma:

    private void btnGerar_Click(object sender, EventArgs e)
            {
                string auxStatus = cbClienteStatus.Text;
                if (cbClienteStatus.Text == "TODOS")
                {
                    auxStatus = "";
                }
                if (cbClienteStatus.Text == "ATIVOS")
                {
                    auxStatus = "A";
                }
                if (cbClienteStatus.Text == "CANCELADOS")
                {
                    auxStatus = "I";
                }
                else if (cbClienteStatus.Text == "")
                {
                    MessageBox.Show("Escolha uma opção: \n TODOS, \n ATIVOS, \n CANCELADOS.", "SigPro - Aviso do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cbClienteStatus.Focus();
                    return;
                }
                using (var ctx = new sigproEntities())
                {
                    var consulta = (from t in ctx.termo
                                    where t.Empresa_Id == frmPrincipal.IDEMPRESA && t.SituacaoTermo.Contains(auxStatus)
                                    orderby t.cliente.ClienteNome                             
                                    select new
                                    {                                    
                                       t.cliente.ClienteNome,
                                       t.cliente.CpfCnpj,
                                       t.EndInstalacao,
                                       t.Termo_Id,
                                       t.DtCompra,
                                       t.DtAtivacao,
                                       t.DtCancelamento,                                   
                                       t.plano.DescricaoPlano,
                                       t.SituacaoTermo
                                    }).ToList();
                    ctx.Dispose();
                    Reports.stiRelatorioTermoAdesaoStatus report = new Reports.stiRelatorioTermoAdesaoStatus();
                    report.RegBusinessObject("SigPro", "Termo", consulta);
                    report.Dictionary.SynchronizeBusinessObjects(2);
                    report.Show();
                }
            }

    No Visual Studio 2012 funciona perfeitamente, só que no Visual Studio 2013 me retorna o seguinte erro:

    Bom nesta consulta ele retorna 3 campos DateTime: DtCompra, DtAtivacao, DtCancelamento, sendo que DtAtivacao e DtCancelamento podem ser null no banco de dados.

    domingo, 15 de junho de 2014 13:07

Respostas

  • Olá Elessandro, 

       quando retorna null o campo DateTime não permite null, tente fazer o cast para o tipo DateTime nullable usando o DateTime? veja :

    return ((DateTime?)......,typeof(DateTime?),true)));
     Porque DateTime? Nullable permite nulo !

    domingo, 15 de junho de 2014 21:50

Todas as Respostas

  • Olá Elessandro, 

       quando retorna null o campo DateTime não permite null, tente fazer o cast para o tipo DateTime nullable usando o DateTime? veja :

    return ((DateTime?)......,typeof(DateTime?),true)));
     Porque DateTime? Nullable permite nulo !

    domingo, 15 de junho de 2014 21:50
  • Daniel,

    Obrigado pela resposta, fiz a alteração que vc passou e o mesmo voltou a funcionar.

    Fica a pergunta, por que esse erro só apareceu depois que eu atualizei para uma Versão + nova do Visual Studio. Fiz um teste usando o EntityFramework 5.0.0 e Framework 4.5 no VS 2013 e apresenta o mesmo problema. Será que era algum Bug do VS 2012 que foi corrigido no 2013?

    Mas valei, eu precisava atualizar para EntityFramework 6.1.0 pois o retorno das consultas são muito rápidas com essa versão.

    segunda-feira, 16 de junho de 2014 12:47
  • Daniel,

    Obrigado pela resposta, fiz a alteração que vc passou e o mesmo voltou a funcionar.

    Fica a pergunta, por que esse erro só apareceu depois que eu atualizei para uma Versão + nova do Visual Studio. Fiz um teste usando o EntityFramework 5.0.0 e Framework 4.5 no VS 2013 e apresenta o mesmo problema. Será que era algum Bug do VS 2012 que foi corrigido no 2013?

    Mas valei, eu precisava atualizar para EntityFramework 6.1.0 pois o retorno das consultas são muito rápidas com essa versão.

     Pode ser um bug sim mas acho dificil, o que pode ter ocorrido é você não ter recebido a data como nulo no VS2012 e recebeu no VS2013 e pegou o erro somente no 2013, pois em qualquer framework tanto no 4.0 como no 4.5 o tipo DateTime não permite nulo.
    • Sugerido como Resposta Daniel Brito br segunda-feira, 16 de junho de 2014 13:01
    segunda-feira, 16 de junho de 2014 13:01