Domanda

Sto avendo difficoltà a tradurre sql per la sintassi LINQ.

Ho 2 tavoli (Categoria e CategoryListing), che fanno riferimento a vicenda con IDCategoria. Ho bisogno di ottenere un elenco di tutti i IDCategoria nella Tabella categoria e il conte di IDCategoria per tutte le partite corrispondenti nella tabella CategoryListing. Se un IDCategoria non è presente in CategoryListing, poi l'IDCategoria dovrebbe comunque essere restituito -. Ma con una frequenza di 0

la seguente query SQL dimostra risultati attesi:

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
È stato utile?

Soluzione

Non testato, ma questo dovrebbe fare il trucco:

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 };

Altri suggerimenti

Sono andato avanti e si è trasferito l'intera query ad una stored procedure sul database. Questo risolve il problema evitando LINQ in primo luogo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top