none
Error al tratar de hacer un inner join con lin q RRS feed

  • Pregunta

  • Saludos estoy tratanto de hacer un inner join con lin q pero me esta danto error adjunto el codigo usando

    favor necesito de su ayuda

       public Productos Obtener(int id)
            {
                var productos = new Productos();
                try
                {
                    using (var ctx = new AppPedidos())
                    {
                         productos = (from P in ctx.Productos
                                          join L in ctx.Lineas
                                          on P.LinId equals L.LinId

                                          select new { P.PrCodigoBarra }
                                         
                                       );
                    
                    }
                }
                catch (Exception E)
                {
                    throw;
                }

            return productos;
            }


    Dewars Barett

    martes, 21 de junio de 2016 16:43

Respuestas

  • jose02,

    El error te marca lo que está sucediendo, la variable productos2 está fuera del ámbito de declaración. Intenta con lo siguiente:

    public Productos Obtener(int id)
    {
    	var productos = new Productos(); /*Cuál es el sentido*/
    	try
    	{
    		using (var ctx = new AppPedidos())
    		{
    		 var    productos2 = from P in ctx.Productos
    							join L in ctx.Lineas
    							on P.LinId equals L.LinId
    
    						 select new { P.PrId, P.PrCodigo, P.PrNombre, P.PrPrecioVenta, P.PrPrecioCosto, P.PrCodigoBarra, P.PrFechaCreacion,
    									  P.PrFechaVencimiento,
    									  P.PrEstatus,
    									  P.PrUnidad,
    									  P.PrTramo,
    									  P.UsuInicioSesion,
    									  P.PrItebis,
    									  P.LinId,
    									  P.LinDescripcion,
    									  P.Descripcion
    						};
    		
    		return productos2;						
    		}
    	}
    	catch (Exception E)
    	{
    		throw; /*Cuál es el sentido*/
    	}
    	
    }

    Fíjate en las observaciones que marco en negrita.

    • Marcado como respuesta jose02 martes, 21 de junio de 2016 17:41
    martes, 21 de junio de 2016 17:30

Todas las respuestas

  • jose02,

    Estás asignando un sólo campo al objeto de tipo Producto que imagino tiene más propiedades. Si necesitas devolver un objeto de tipo Producto entonces la consulta debe considerar todas las propiedades

    /*Puede bastar con lo siguiente*/
    select P;
    
    /*o*/
    select new { P.Campo1, P.Campo2, ...}

    martes, 21 de junio de 2016 16:51
  • en ninguno de los dos casos me funcion,

    me gustaria saber si es algun error en la sentencia lin q o en la forma en que estoy estructurando para la consulta

     public Productos Obtener(int id)
            {
                var productos = new Productos();
                try
                {
                    using (var ctx = new AppPedidos())
                    {
                         productos = from P in ctx.Productos
                                        join L in ctx.Lineas
                                        on P.LinId equals L.LinId

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

                      
                    }
                }
                catch (Exception E)
                {
                    throw;
                }
                return productos;
           
            }


    Dewars Barett

    martes, 21 de junio de 2016 17:03
  • jose02,

    Debes construir un tipo anónimo para cada propiedad de la clase Producto, algo como lo siguiente: 

    select new { ID = P.PrId, Codigo = P.PrCodigo, ... }

    Donde ID y Codigo son propiedades de la clase Producto

    martes, 21 de junio de 2016 17:10
  • Saludos

    aun asiendo eso mismo que dices me da error

    pero una pregunta si te fijas tengo esta declaracion var productos = new Productos()

    y dentro del using puse var productos2 = a mi consulta de lin q

    y no me da el error, pero entonces cuando intento retornar productos2 que es la variable que tiene la sentencia

    me dice el error la varible no existe en el constexto actual

    que me sugieres o si tienen otra forma de hacerlo

          public Productos Obtener(int id)
            {
                var productos = new Productos();
                try
                {
                    using (var ctx = new AppPedidos())
                    {
                     var    productos2 = from P in ctx.Productos
                                        join L in ctx.Lineas
                                        on P.LinId equals L.LinId

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

                    }
                }
                catch (Exception E)
                {
                    throw;
                }
                return productos2;
            }


    Dewars Barett

    martes, 21 de junio de 2016 17:25
  • jose02,

    El error te marca lo que está sucediendo, la variable productos2 está fuera del ámbito de declaración. Intenta con lo siguiente:

    public Productos Obtener(int id)
    {
    	var productos = new Productos(); /*Cuál es el sentido*/
    	try
    	{
    		using (var ctx = new AppPedidos())
    		{
    		 var    productos2 = from P in ctx.Productos
    							join L in ctx.Lineas
    							on P.LinId equals L.LinId
    
    						 select new { P.PrId, P.PrCodigo, P.PrNombre, P.PrPrecioVenta, P.PrPrecioCosto, P.PrCodigoBarra, P.PrFechaCreacion,
    									  P.PrFechaVencimiento,
    									  P.PrEstatus,
    									  P.PrUnidad,
    									  P.PrTramo,
    									  P.UsuInicioSesion,
    									  P.PrItebis,
    									  P.LinId,
    									  P.LinDescripcion,
    									  P.Descripcion
    						};
    		
    		return productos2;						
    		}
    	}
    	catch (Exception E)
    	{
    		throw; /*Cuál es el sentido*/
    	}
    	
    }

    Fíjate en las observaciones que marco en negrita.

    • Marcado como respuesta jose02 martes, 21 de junio de 2016 17:41
    martes, 21 de junio de 2016 17:30
  • Cuando paso el retur productos2

    me manda el siguiente error

    esto es partiendo del mismo ejemplo que me mandas

    No se puede convertir implícitamente el tipo 'AnonymousType#1' en 'Model.Productos'   


    Dewars Barett

    martes, 21 de junio de 2016 17:39
  • Gracias ya vi que le faltaba el to list

    Gracias me sacaste de un tremendo apuro ya que soy nuevo en esto de MVC


    Dewars Barett

    martes, 21 de junio de 2016 17:41