Dans EF 4.0+, LEFT JOIN syntaxe est un peu différent et présente une bizarrerie fou:
var query = from c1 in db.Category
join c2 in db.Category on c1.CategoryID equals c2.ParentCategoryID
into ChildCategory
from cc in ChildCategory.DefaultIfEmpty()
select new CategoryObject
{
CategoryID = c1.CategoryID,
ChildName = cc.CategoryName
}
Si vous capturez l'exécution de cette requête dans SQL Server Profiler, vous verrez qu'il fait en effet effectuer une jointure gauche. Cependant, si vous avez plusieurs clauses LEFT JOIN ("Group Join") dans votre requête Linq-to-Entity, j'ai trouvé que la clause d'auto-jointure PEUT effectivement s'exécuter comme dans INNER JOIN - MÊME SI LA SYNTAXE CI-DESSUS EST UTILISÉE!
La résolution à cela? Comme je suis fou et, selon MS, faux comme cela semble, j'ai résolu cela en changeant l'ordre des clauses de jointure. Si la clause LEFT JOIN auto-référencée était la première jointure de groupe Linq, SQL Profiler a signalé un INNER JOIN. Si la clause LEFT JOIN auto-référencée était la dernière jointure du groupe Linq, SQL Profiler a signalé un LEFT JOIN.
C'est très bien. Je connais celui-là, mais j'ai besoin d'EF. De toute façon Merci ... – Waheed
@Waheed: Je ne sais pas ce que vous voulez dire - vous devriez pouvoir utiliser cette requête exacte dans EF. –
bonjour, je l'ai changé pour retourner la liste catergoyList alors il dit que vous avez besoin de lancer. comment lancer var à la liste objet? –