2010-10-11 5 views
1

J'essaie de convertir la requête T-SQL suivante en linq2sql. Quoi que je fasse, cela se traduit par des choses méchantes avec des jointures croisées. Toute suggestion?Comment convertir une requête composée de INNER JOIN, LEFT JOIN et GROUP BY en une requête linq2sql similaire?

Compte tenu des tables A, B, C

SELECT A.Id, A.Name, Pool.Total 
FROM A 
INNER JOIN B ON A.Id = B.AId 
LEFT JOIN (
SELECT AId, 
SUM(Quantity) as Total 
FROM C 
GROUP BY AId) AS Pool ON A.Id = C.AId 
WHERE Pool.Total < B.Threshold 
+1

comment traduisez-vous le code à LINQ? êtes-vous essayé en utilisant LinqPad http://www.linqpad.net/? – RRUZ

+0

J'utilise linq2sql profiler http://l2sprof.com/ –

+0

Malheureusement, linqpad ne convertit pas les requêtes SQL en requêtes linq/lambda ... :) –

Répondre

1

J'ai écrit une requête LINQ qui se traduit en effet applys, mais le plan d'exécution semble le même, et le coût de la requête dans le lot est 50/50 , donc je dirais que la requête traduite est la même (ou est un synonyme).

La requête LINQ est

from a in As 
join b in Bs on a.ID equals b.AID 
join pool in (from c in Cs 
       group c by c.AId into cG 
       select new {AID = cG.Key,Total = cG.Sum(c=>c.Quantity)}) on a.ID equals pool.AID into poolG 
from pool in poolG.DefaultIfEmpty() 
where pool.Total<b.Threshold 
select new {a.ID, a.Name, pool.Total}