SQL a LINQ con combinación múltiple, recuento y combinación izquierda
Escribí esta solicitud SQL con múltiplesJOIN
(incluyendo unLEFT JOIN
)
Me da el resultado esperado.
SELECT DISTINCT c.Id,
c.Title,
COUNT(v.Id) AS 'Nb_V2',
COUNT(DISTINCT v.IdUser) AS 'Nb_V1',
r.cnt AS 'Nb_R'
FROM TABLE_C c
JOIN TABLE_V v on c.Id = v.Id
LEFT JOIN (
SELECT Id, COUNT(*) AS cnt
FROM TABLE_R
GROUP BY Id
) r ON c.Id = r.Id
WHERE c.IdUser = '1234'
GROUP BY c.Id, c.Title, r.cnt
Sin embargo, 'me gustaría el equivalente de Linq de esta solicitud, para ponerlo en la capa de acceso a datos de mi aplicación.
Intenté algo como:
var qResult = from c in dbContext.TABLE_C
join v in dbContext.TABLE_V on c.IdC equals v.IdC
join r in dbContext.TABLE_R on v.IdC equals r.IdC into temp
from x in temp.DefaultIfEmpty()
group x by new { c.IdC, c.Title /*miss something ?*/} into grouped
select new
{
IdC = grouped.Key.IdC, --good result
Title = grouped.Key.Title, --good result
NbR = grouped.Distinct().Count(t => t.IdC > 0), --good, but "t.Id > 0" seems weird
Count = --I'm lost. No idea how to get my COUNT(...) properties (Nb_V1 and Nb_V2)
};
Traté de adaptarmeesta pregunta SO Pero no puedo entenderlo. Estoy perdido con elCount
dentro de la sub-solicitud agrupada.
¿Alguien puede explicarme dónde estoy equivocado?
Consejo profesional: punto extra si alguien puede escribir el equivalente con una expresión lambda