none
Erro com lambda e campos float RRS feed

  • Pergunta

  • Sempre que carrego minha lambda, me esse erro:

    System.InvalidOperationException: 'The specified cast from a materialized 'System.Double' type to the 'System.Single' type is not valid.'

    Isso só acontece com campos float. Se eu comento os campos e deixo apenas os campos strings, roda normalmente. Veja a classe que implementa a lambda:

    public class Autoriza
        {
            InetContext contexto = new InetContext();
            Liberacao liberacao = new Liberacao();
            public IEnumerable<object> getAutoriza()
            {
                var lista = contexto.Liberacoes
                    .Join(contexto.ItensLibs, lib => lib.IdOrcamento, itens => itens.IdOrcamento, (lib, itens) => new { lib, itens })
                    .Where(a => a.lib.IdOrcamento == a.itens.IdOrcamento)
                    .Select(libera => new
                    {
                        libera.lib.TipoVenda,
                        libera.lib.Vencimento,
                        libera.lib.Juros,
                        libera.lib.Entrada,
                        libera.lib.Acrescimo,
                        libera.lib.Desconto,
                        libera.lib.Mensagem,
                        libera.lib.DataLib,
                        libera.lib.Vendedor,
                        libera.lib.Cliente,
                        libera.lib.Filial,
                        libera.itens.Produto,
                        libera.itens.Qtde,
                        libera.itens.Unitario,
                        libera.itens.Custo,
                        libera.itens.CustoDiario,
                        libera.itens.UltCondicao,
                        libera.itens.Total
                    }).ToList();
    
                return lista;
            }
        }


    AS classes POCO

    [Table("LIBERACAO")]
        public class Liberacao
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [Column("ID_LIBERACAO")]
            public int IdLiberacao { get; set; }
            [Column("FLAG_LIBERACAO")]
            public byte FlagLiberacao { get; set; }
            [Column("ID_ORCAMENTO")]
            public int IdOrcamento { get; set; }
            [Column("ID_VENDEDOR")]
            public int IdVendedor { get; set; }
            [Column("VENDEDOR")]
            public string Vendedor { get; set; }
            [Column("ID_FILIAL")]
            public int IdFilial { get; set; }
            [Column("FILIAL")]
            public string Filial { get; set; }
            [Column("DATALIB")]
            public float DataLib { get; set; }
            [Column("HORALIB")]
            public float HoraLib { get; set; }
            [Column("ID_CLIENTE")]
            public int IdCliente { get; set; }
            [Column("CLIENTE")]
            public string Cliente { get; set; }
            [Column("TIPO_VENDA")]
            public string TipoVenda { get; set; }
            [Column("JUROS")]
            public float Juros { get; set; }
            [Column("DESCONTO")]
            public float Desconto { get; set; }
            [Column("VENCIMENTO")]
            public float Vencimento { get; set; }
            [Column("ACRESCIMO")]
            public float Acrescimo { get; set; }
            [Column("ENTRADA")]
            public float Entrada { get; set; }
            [Column("PRAZO")]
            public float Prazo { get; set; }
            [Column("TOTAL_LIQUIDO")]
            public float TotalLiquido { get; set; }
            [Column("MIN_TOTAL")]
            public float MinTotal { get; set; }
            [Column("USUARIO")]
            public string Usuario { get; set; }
            [Column("CUSTODIARIO")]
            public Decimal CustoDiario { get; set; }
            [Column("MAX_COMI")]
            public Decimal MaxComi { get; set; }
            [Column("VALOR_COMI")]
            public Decimal ValorComi { get; set; }
            [Column("NOVA_COMI")]
            public Decimal NovaComi { get; set; }
            [Column("MENSSAGEM")]
            public string Mensagem { get; set; }
            [Column("Menssagem_RET")]
            public string MensagemRet { get; set; }
            [Column("DataRetorno")]
            public double DataRetorno { get; set; }
            [Column("HoraRetorno")]
            public double HoraRetorno { get; set; }
            [Column("TempoProcesso")]
            public double TempoPrecesso { get; set; }
            [Column("Tipo")]
            public int Tipo { get; set; }
            [Column("PROGRAMA")]
            public string Programa { get; set; }
            [Column("NOME_PC")]
            public string NomePc { get; set; }
            [Column("NOME_PROCEDURE")]
            public string NomeProcedure { get; set; }
            [Column("Perc_Juros_Total")]
            public decimal PercJurosTotal { get; set; }
            [Column("FLAG_CULTURAVENCIDA")]
            public byte FlagCulturaVencida { get; set; }
            [Column("CULTURA")]
            public string Cultura { get; set; }
            [Column("CULTURA_VCTO")]
            public int CulturaVcto { get; set; }
            [Column("FLAG_PRORROGADO")]
            public byte FlagProrrogado { get; set; }
            [Column("VALOR_PRORROGADO")]
            public double ValorProrrogado { get; set; }
            [Column("DIAS_ATRASO")]
            public int DiasAtrazo { get; set; }
            [Column("ID_VENDEDOR2")]
            public int IdVendedor2 { get; set; }
            [Column("VENDEDOR2")]
            public string Vendedor2 { get; set; }
            [Column("COMISSAO_VEND2")]
            public double ComissaoVend2 { get; set; }
            [Column("FLAG_COTACAO")]
            public byte FlagCotacao { get; set; }
            [Column("TipoVenda")]
            public string TipoVenda1 { get; set; }
            [Column("Flag_Receber_Atrasado")]
            public byte FlagReceberAtrazado { get; set; }
            [Column("Autorizou_Receber_Atrasado")]
            public string AutorizouReceberAtrazado { get; set; }

        }

    ITENSLIB

    [Table("ITENSLIB")]
        public class ItensLib
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [Column("ID_ITENSLIB")]
            public int IdItensLib { get; set; }
            [Column("ID_ORCAMENTO")]
            public int IdOrcamento { get; set; }
            [Column("ID_PRODUTO")]        
            public int IdProduto { get; set; }
            [Column("PRODUTO")]
            public string Produto { get; set; }
            [Column("QTDE")]
            public float Qtde { get; set; }
            [Column("UNITARIO")]
            public float Unitario { get; set; }
            [Column("CUSTO")]
            public float Custo { get; set; }
            [Column("MINIMO")]
            public float Minimo { get; set; }
            [Column("TOTAL")]
            public float Total { get; set; }
            [Column("CUSTODIARIO")]
            public Double CustoDiario { get; set; }
            [Column("FABRICANTE")]
            public string Fabricante { get; set; }
            [Column("ULT_CONDICAO")]
            public Double UltCondicao { get; set; }
            [Column("PROGRAMA")]
            public string Programa { get; set; }
            [Column("NOME_PC")]
            public string NomePc { get; set; }
            [Column("NOME_PROCEDURE")]
            public string NomeProcedure { get; set; }
            [Column("Flag_Vencido")]
            public byte FlagVencido { get; set; }
            [Column("TipoVenda")]
            public string TipoVenda { get; set; }
            [Column("VENDA_VISTA")]
            public float VendaVista { get; set; }
            [Column("MARGEM_AVISTA")]
            public float MargemAvista { get; set; }
            [Column("QTDE_NEG_AVISTA")]
            public float QtdNegAvista { get; set; }
            [Column("VENDA_PRAZO")]
            public float VendaPrazo { get; set; }
            [Column("PM_PRAZO")]
            public float PmPrazo { get; set; }
            [Column("MARGEM_PRAZO")]
            public float MargemPrazo { get; set; }
            [Column("JUROS_PRAZO")]
            public float JurosPrazo { get; set; }
            [Column("QTDE_PRAZO")]
            public float QtdePrazo { get; set; }
            [Column("VENDA_VISTA_ANT")]
            public float VendaVistaAnt { get; set; }
            [Column("MARGEM_AVISTA_ANT")]
            public float MargemAvistaAnt { get; set; }
            [Column("QTDE_NEG_AVISTA_ANT")]
            public float QtdeNegAvistaAnt { get; set; }
            [Column("VENDA_PRAZO_ANT")]
            public float VendaPrazoAnt { get; set; }
            [Column("PM_PRAZO_ANT")]
            public float PmPrazoAnt { get; set; }
            [Column("MARGEM_PRAZO_ANT")]
            public float MargemPrazoAnt { get; set; }
            [Column("JUROS_PRAZO_ANT")]
            public float JurosPrazoAnt { get; set; }
            [Column("QTDE_PRAZO_ANT")]
            public float QtdePrazoAnt { get; set; }
            [Column("VENDA_VISTA_ANT1")]
            public float VendaVistaAnt1 { get; set; }
            [Column("MARGEM_AVISTA_ANT1")]
            public float MargemAvistaAnt1 { get; set; }
            [Column("QTDE_NEG_AVISTA_ANT1")]
            public float QtdeNegAvistaAnt1 { get; set; }
            [Column("VENDA_PRAZO_ANT1")]
            public float VendaPrazoAnt1 { get; set; }
            [Column("PM_PRAZO_ANT1")]
            public float PmPrazoAnt1 { get; set; }
            [Column("MARGEM_PRAZO_ANT1")]
            public float MargemPrazoAnt1 { get; set; }
            [Column("JUROS_PRAZO_ANT1")]
            public float JurosPrazoAnt1 { get; set; }
            [Column("QTDE_PRAZO_ANT1")]
            public float QtdePrazoAnt1 { get; set; }
        }

    E a minha controller, onde eu chamo minha m,odel que executa a lambda

     public class AutorizaController : ApiController
        {
            Autoriza autoriza = new Autoriza();
    
            [AcceptVerbs("Get")]
            public IEnumerable<object> getLiberacao()
            {
                return autoriza.getAutoriza().ToList();
            }
        }
    essa linha na lambda libera.itens.UltCondicao no banco é REAL, se coloco double ou float dá o erro, mas se coloco Double, aí funciona, mas se faço isso com os demais, continua o erro. 
    • Editado pnet quarta-feira, 23 de agosto de 2017 16:11
    quarta-feira, 23 de agosto de 2017 16:05

Todas as Respostas

  • Percebi que por mais que eu declare em minha model o tipo float ou double ou até Double, o Entity está entendendo que eu tenho um tipo Single e ao pegar no banco o tipo float, ele diz que não é possível a conversão. O que passa que não sei o que fazer, já que é uma interpretação do Entity, assim penso eu.
    sexta-feira, 25 de agosto de 2017 20:28
  • Não sei se isso pode ser realmente do Entity. Fiz um DTO e mapeei a classe e tratei os campos float. Chegou a funcionar, mas agora voltou a dar o mesmo pau e não consigo mais fazer funcionar.Abaixo o DTO e o mapeamento:

    public LiberacaoItensDTO()
            {
                Mapper.Initialize(cfg =>
                {
                    cfg.CreateMap<LiberacaoItensDTO, Liberacao>()
                    .ForMember(d => d.DataLib, opt => opt.MapFrom(src => Convert.ToDateTime(DataLib)));
                    cfg.CreateMap<LiberacaoItensDTO, Liberacao>()
                    .ForMember(d => d.Juros, opt => opt.MapFrom(src => Juros.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, Liberacao>()
                    .ForMember(d => d.Desconto, opt => opt.MapFrom(src => Desconto.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, Liberacao>()
                    .ForMember(d => d.Acrescimo, opt => opt.MapFrom(src => Acrescimo.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, Liberacao>()
                   .ForMember(d => d.Vencimento, opt => opt.MapFrom(src => Convert.ToDateTime(Vencimento)));
                    cfg.CreateMap<LiberacaoItensDTO, Liberacao>()
                    .ForMember(d => d.Entrada, opt => opt.MapFrom(src => Entrada.ToString("C2")));

                    cfg.CreateMap<LiberacaoItensDTO, ItensLib>()
                    .ForMember(d => d.Qtde, opt => opt.MapFrom(src => Qtde.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, ItensLib>()
                    .ForMember(d => d.Unitario, opt => opt.MapFrom(src => Unitario.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, ItensLib>()
                    .ForMember(d => d.Custo, opt => opt.MapFrom(src => Custo.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, ItensLib>()
                    .ForMember(d => d.CustoDiario, opt => opt.MapFrom(src => CustoDiario.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, ItensLib>()
                    .ForMember(d => d.UltCondicao, opt => opt.MapFrom(src => UltCondicao.ToString("C2")));
                    cfg.CreateMap<LiberacaoItensDTO, ItensLib>()
                    .ForMember(d => d.Total, opt => opt.MapFrom(src => Total.ToString("C2")));
                });
            }
            public int IdLiberacao { get; set; }
            [DefaultValue(0)]
            public int IdOrcamento { get; set; }
            [DefaultValue(0)]
            public int IdVendedor { get; set; }
            public string Vendedor { get; set; }
            public int IdFilial { get; set; }
            public string Filial { get; set; }
            [DefaultValue(0)]
            public float DataLib { get; set; }
            public int IdCliente { get; set; }
            public string Cliente { get; set; }
            public string TipoVenda { get; set; }
            [DefaultValue(0)]
            public float Juros { get; set; }
            [DefaultValue(0)]
            public float Desconto { get; set; }
            [DefaultValue(0)]
            public float Vencimento { get; set; }
            [DefaultValue(0)]
            public float Acrescimo { get; set; }
            [DefaultValue(0)]
            public float Entrada { get; set; }
            public string Mensagem { get; set; }
            public int IdProduto { get; set; }
            public string Produto { get; set; }
            [DefaultValue(0)]
            public float Qtde { get; set; }
            [DefaultValue(0)]
            public float Unitario { get; set; }
            [DefaultValue(0)]
            public float Custo { get; set; }
            [DefaultValue(0)]
            public float CustoDiario { get; set; }
            [DefaultValue(0)]
            public float UltCondicao { get; set; }
            [DefaultValue(0)]
            public float Total { get; set; }
        }


    • Editado pnet quinta-feira, 31 de agosto de 2017 16:23
    quinta-feira, 31 de agosto de 2017 16:22