Pregunta

Estoy teniendo dificultades para traducir sql a la sintaxis de LINQ.

Tengo 2 tablas (Categoría y CategoryListing) que hacen referencia a los demás con CategoryID. Necesito obtener una lista de todos los CategoryID de Categoría Tabla y el conde de CategoryID para todos los partidos correspondientes en la tabla CategoryListing. Si un CategoryID no está presente en CategoryListing, entonces el CategoryID todavía debe ser devuelto -. Pero con una frecuencia de 0

La siguiente consulta SQL muestra los resultados esperados:

SELECT c.CategoryID, COALESCE(cl.frequency, 0) as frequency
FROM Category c
LEFT JOIN (
    SELECT cl.CategoryID, COUNT(cl.CategoryID) as frequency 
    FROM CategoryListing cl
    GROUP BY cl.CategoryID
) as cl
ON c.CategoryID = cl.CategoryID
WHERE c.GuideID = 1
¿Fue útil?

Solución

No se ha probado, pero esto debe hacer el truco:

var q = from c in ctx.Category
        join clg in 
            (
                from cl in ctx.CategoryListing
                group cl by cl.CategoryID into g
                select new { CategoryID = g.Key, Frequency = g.Count()}
            ) on c.CategoryID equals clg.CategoryID into cclg
        from v in cclg.DefaultIfEmpty()
        where c.GuideID==1
        select new { c.CategoryID, Frequency = v.Frequency ?? 0 };

Otros consejos

Me fui por delante y se trasladó toda la consulta a un procedimiento almacenado en la base de datos. Esto resuelve el problema evitando LINQ en el primer lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top