none
ayuda con consulta linq para informe RRS feed

  • Pregunta

  • Dado el siguiente código, cuando ejecuto el método "getCompraVenta()" me da el siguiente error: LINQ to Entities no reconoce el método 'System.Linq.IQueryable`1[ejEntiy.totalVentas] getTotalVentas()' del método, y este método no se puede traducir en una expresión de almacén.

    podría alguien ayudarme. muchas gracias.

      public class Vistas
        {
            private ModeloArticulosContainer db;
    
            public Vistas()
            {
                db = new ModeloArticulosContainer();
            }
    
            public IQueryable<DetalleCompraVenta> getCompraVenta() 
            {
                return (from c in this.getTotalCompras()
                       from d in this.getTotalVentas()
                       where c.articulo == d.articulo                    
                        select new DetalleCompraVenta
                        {
                            articulo = c.articulo,
                            ventas = d.ventas,
                            compras = c.compras
                        });                                
            }
    
            public IQueryable<totalCompras> getTotalCompras()
            {            
                return (from c in db.Compras
                        group c by c.ArticuloId into agrupado
                        select new totalCompras{ 
                            articulo = agrupado.Key,
                            compras = agrupado.Sum(c => c.cantidad)}
                        );
    
            }
    
            public IQueryable<totalVentas> getTotalVentas()
            {            
                return (from c in db.Ventas
                        group c by c.ArticuloId into agrupado
                        select new totalVentas
                        {
                            articulo = agrupado.Key,
                            ventas = agrupado.Sum(c => c.cantidad)
                        }
                        );
            }
    
        }
    
        public class totalCompras
        {
            public Int32 articulo { get; set; }
            public Int32 compras { get; set; }
        }
        
        public class totalVentas
        {
            public Int32 articulo { get; set; }
            public Int32 ventas { get; set; }
        }
    
        public class DetalleCompraVenta
        {
            public Int32 articulo { get; set; }
            public Int32 ventas { get; set; }
            public Int32 compras { get; set; }
        }

    martes, 4 de junio de 2013 15:02

Todas las respuestas

  • recuerda que al usar entity framework o linq to sql el linq que generes sera convertido a SQL

    para poder ejecutar la consulta sobre el motor de la db

    si defines en el linq una funciona que no tiene equivalente entonces se produce este fallo

    quizas debas realizar dos queries, una simple que conviert el linq a sql y ejecute, el otro ay con lo objetos en memoria ahi si podrias aplciar la funciona que has creado

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 6 de junio de 2013 4:32
  • muchas gracias Leandro, como siempre tan amable.

    pero no termino de entenderlo... porque entonces, ¿porque esta opción si que funciona?

            public IQueryable<DetalleCompraVenta> getCompraVenta() 
            {
                return (from c in this.getTotalVentas()
                        select new DetalleCompraVenta
                        {
                            articulo = c.articulo,
                            ventas = c.ventas,
                            compras = 0
                        }).Union(from d in this.getTotalCompras()
                                 select new DetalleCompraVenta
                                 {
                                     articulo = d.articulo,
                                     ventas = 0,
                                     compras = d.compras
                                 }
                        );
            }

    realmente me da igual el producto cartesiano o la unión ya que el gráfico se agrupa por artículo.... mejor claro el producto cartesiano pero bueno, para la prueba lo mismo me daba.

    que difernecia hay???

    supongo que el problema es la construcción de la sentencia SQL que hace Linq, pero tambien entiendo que lo que hago en el primer ejemplo (el producto cartesiano) es algo relativamente normal en SQLServer

    jueves, 6 de junio de 2013 9:52