none
Convertir una consulta de selección Select (CROSS APPLY) a LINQ RRS feed

  • Pregunta

  • Hola 

    Estoy trabajando con Visual Studio 2015, Entity Framework enfoque code first, SQL Server 2014 Express Edition

    Tengo la necesidad de convertir esta query de transact SQL a linq

    SELECT distinct(PC.ProductoCatalogoId),
        P.Nombre + ' ' + PL.Product + ' ' + E.Nombre + ' ' + O.NombreOpcion AS Descripcion,
        PC.PrecioVenta
    FROM ProductoCatalogos AS PC
    INNER JOIN Productos AS P ON PC.ProductoId = P.ProductoId
    INNER JOIN EspecificacionCatalogos AS EC ON PC.ProductoCatalogoId = EC.ProductoCatalogoId 
    INNER JOIN EspecificacionProductos AS EP ON EC.EspecificacionProductoId = EP.EspecificacionProductoId
    INNER JOIN Especificaciones AS E ON EP.EspecificacionId = E.EspecificacionId
    AND E.EspecificacionId = 2
    INNER JOIN Opciones AS O ON EC.OpcionId = O.OpcionId
    CROSS APPLY (
        SELECT E.Nombre + ' ' + O.NombreOpcion AS 'Product'
        FROM ProductoCatalogos AS PC
        INNER JOIN Productos AS P ON PC.ProductoId = P.ProductoId
        INNER JOIN EspecificacionCatalogos AS EC ON PC.ProductoCatalogoId = EC.ProductoCatalogoId
        INNER JOIN EspecificacionProductos AS EP ON EC.EspecificacionProductoId = EP.EspecificacionProductoId
        INNER JOIN Especificaciones AS E ON EP.EspecificacionId = E.EspecificacionId
            AND E.EspecificacionId = 5
        INNER JOIN Opciones AS O ON EC.OpcionId = O.OpcionId
    
        ) PL
        WHERE P.Nombre LIKE '%ferr%'

    Por el momento solo tengo esto porque no se como implementar CROSS APPLY en linq

    public IEnumerable<ProductoCatalogo> SearchProduct(int colorId, int tallaId)
            {
                using (var context = new BusinessContext())
                {
                    var result = from pc in context.ProductoCatalogos
                        join p in context.Productos on pc.ProductoId equals p.ProductoId
                        join ec in context.EspecificacionCatalogos on pc.ProductoCatalogoId equals ec.ProductoCatalogoId
                        join ep in context.EspecificacionProductos on ec.EspecificacionProductoId equals ep.EspecificacionProductoId
                        join e in context.Especificaciones on ep.EspecificacionId equals e.EspecificacionId
                        join o in context.Opciones on ec.OpcionId equals o.OpcionId
                    
                }
            }

    Espero me puedan ayudar.

    Saludos!

     

    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    martes, 9 de octubre de 2018 1:27

Respuestas

  • Hola Pedro Ávila

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma,  te recomiendo el siguiente enlace(en inglés) en el cual es un tutorial sobre como realizar la conversión que deseas hacer.

    https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/cross-table-queries-linq-to-dataset

    Gracias por usar los foros de MSDN.

    Pablo Rubio

     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    martes, 9 de octubre de 2018 18:04
    Moderador