none
No se puede convertir implícitamente el tipo 'AnonymousType#1' RRS feed

  • Pregunta

  • Saludos,

    me gustaria saber como puedo solucionar este error

    donde me da error exactamente es al retornar la viariable que tiene la contulta.

    No se puede convertir implícitamente el tipo 'AnonymousType#1'

    anexo la forma como estoy haciendo la consulta

    public Productos ObtenerId(int id)
            {

                AppPedidos ctx = new AppPedidos();
                var consulta = (from P in ctx.Productos
                                join f in ctx.Lineas
                                on P.LinId equals f.LinId
                                orderby f.LinId

                                select new
                                {
                                    PrId = P.PrId,
                                    PrCodigo = P.PrCodigo,
                                    PrNombre = P.PrNombre,
                                    PrPrecioVenta = P.PrPrecioVenta,
                                    PrPrecioCosto = P.PrPrecioCosto,
                                    PrCodigoBarra = P.PrCodigoBarra,
                                    PrFechaCreacion = P.PrFechaCreacion,
                                    PrFechaVencimiento = P.PrFechaVencimiento,
                                    PrEstatus = P.PrEstatus,
                                    PrUnidad = P.PrUnidad,
                                    PrTramo = P.PrTramo,
                                    UsuInicioSesion = P.UsuInicioSesion,
                                    PrItebis = P.PrItebis,
                                    LinId = P.LinId,
                                    LinDescripcion = f.LinDescripcion,
                                    //Descripcion = P.Descripcion
                                });

                return consulta.FirstOrDefault();
            } 

                 

    Dewars Barett

    viernes, 24 de junio de 2016 21:23

Respuestas

  • jose02,

    Ya veo, las dos últimas propiedades de la lista de selección (select) no corresponden a las propiedades de la clase Productos, como podrás deducir no puedes devolver un tipo Producto si la consulta no retorna una estructura de tipo producto, ¿verdad?

    Con temor a equivocarme, podrías cambiar el tipo del método a object dado que los tipos anónimos derivan de éste, pero con eso pierdes el típado fuerte, a menos exista otra solución por lo pronto queda que implementes una clase que contemple sólo las propiedades que deseas devolver, el método ya no retornaría un tipo Producto, sino un tipo ProductoCustom -por ejemplo.-


    viernes, 24 de junio de 2016 22:12

Todas las respuestas

  • jose02,

    El método ObtenerId() retorna un tipo Productos, la consulta debería retornar las propiedades que componen el tipo:

    var consulta = (from P in ctx.Productos
                                join f in ctx.Lineas
                                on P.LinId equals f.LinId
                                orderby f.LinId
    
                                select new Producto
                                {
                                    PrId = P.PrId,
                                    PrCodigo = P.PrCodigo,
                                    PrNombre = P.PrNombre,
                                    PrPrecioVenta = P.PrPrecioVenta,
                                    PrPrecioCosto = P.PrPrecioCosto,
                                    PrCodigoBarra = P.PrCodigoBarra,
                                    PrFechaCreacion = P.PrFechaCreacion,
                                    PrFechaVencimiento = P.PrFechaVencimiento,
                                    PrEstatus = P.PrEstatus,
                                    PrUnidad = P.PrUnidad,
                                    PrTramo = P.PrTramo,
                                    UsuInicioSesion = P.UsuInicioSesion,
                                    PrItebis = P.PrItebis,
                                    LinId = P.LinId,
                                    LinDescripcion = f.LinDescripcion,
                                    //Descripcion = P.Descripcion
                                }).ToList();

    Fíjate las líneas que marco en negrita

    viernes, 24 de junio de 2016 21:29
  • entiendo eso que comentas pero cuando le pongo select new producto la consulta que me genera la realiza sin el join y la parte de linDescripcion que viene de otra tabla me da error.

    Dewars Barett

    viernes, 24 de junio de 2016 21:33
  • jose02,

    Las propiedades -que muestras en el select- que no tienen sufijo Pr, ¿pertenecen a la clase Productos?

    Nuevamente reitero, fíjate que el método retorna un tipo Producto, no puedes retornar una estructura que no esté basada en un tipo Producto. ¿Puedes mostrar la clase Producto y sus propiedades?

    viernes, 24 de junio de 2016 21:36
  • esta es mi clase de producto

    entonces como hago para mostrar el lindescripcion que se encuentra en la tabla de lineas

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            public Productos()
            {
                CotizacionesDetalle = new HashSet<CotizacionesDetalle>();
                PedidosDetalle = new HashSet<PedidosDetalle>();

            }

            [Key]
            public int? PrId { get; set; }

            [StringLength(50)]
            public string PrCodigo { get; set; }

            [StringLength(50)]
            public string PrNombre { get; set; }

            public decimal? PrPrecioVenta { get; set; }

            public decimal? PrPrecioCosto { get; set; }

            [StringLength(50)]
            public string PrCodigoBarra { get; set; }

            public DateTime? PrFechaCreacion { get; set; }

            public DateTime? PrFechaVencimiento { get; set; }

            public int? PrEstatus { get; set; }

            [StringLength(15)]
            public string PrUnidad { get; set; }

            [StringLength(15)]
            public string PrTramo { get; set; }

            [StringLength(15)]
            public string UsuInicioSesion { get; set; }

            public decimal PrItebis { get; set; }

            public int LinId { get; set; }


            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<CotizacionesDetalle> CotizacionesDetalle { get; set; }

            //public virtual Lineas Lineas { get; set; }

            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<PedidosDetalle> PedidosDetalle { get; set; }

             

    Dewars Barett


    • Editado jose02 viernes, 24 de junio de 2016 21:44
    viernes, 24 de junio de 2016 21:38
  • jose02,

    Ya veo, las dos últimas propiedades de la lista de selección (select) no corresponden a las propiedades de la clase Productos, como podrás deducir no puedes devolver un tipo Producto si la consulta no retorna una estructura de tipo producto, ¿verdad?

    Con temor a equivocarme, podrías cambiar el tipo del método a object dado que los tipos anónimos derivan de éste, pero con eso pierdes el típado fuerte, a menos exista otra solución por lo pronto queda que implementes una clase que contemple sólo las propiedades que deseas devolver, el método ya no retornaría un tipo Producto, sino un tipo ProductoCustom -por ejemplo.-


    viernes, 24 de junio de 2016 22:12