J'utilise .NET 4 et VS 2010 et ont le même problème dans .NET 3.5/VS 2008Sélection multiple un à plusieurs relations dans LINQ to SQL en utilisant des jointures externes
La structure:
Tableau 1: appelez
Tableau 2: AddressChangeRequest
Tableau 3: CallNotes
Un seul appel peut avoir plusieurs AddressChangeRequests et beaucoup CallNotes. Un client (customerKey) peut avoir plusieurs appels.
Le code LINQ.
retour db.Calls.Where (c => c.CustomerKey == '...') Sélectionner ( c => nouvel appel (c.CustomerKey, c.StartTime, c .AddressChangeRequests, c.CallNotes));
Appel est un objet de domaine qui attend une liste de AddressChangeRequests et CallNotes. Le code renvoie une liste d'appels comme prévu, mais le SQL n'est pas optimal.
Le code ci-dessus génère SQL comme un SELECT de la table d'appel avec une jointure externe gauche sur la table AddressChangeRequest suivie par des requêtes SELECT séparées de la table CallNote (un pour chaque appel associé)
Select ... from Call as c
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId
Select ... from CallNote Where callId = 123
Select ... from CallNote Where callId = 456
Select ... from CallNote Where callId = 789
Si Je supprime AddressChangeRequests du code, une jointure externe gauche est générée pour la table CallNote et les instructions Select individuelles ne sont plus générées.
Ma question est, en utilisant LINQ comment puis-je générer une seule instruction SQL comme suit:
Select ... from Call as c
LEFT OUTER JOIN AddressChangeRequest as acr ON c.id = acr.callId
LEFT OUTER JOIN CallNote as cn ON c.id = cn.callId
En supposant que LINQtoSQL et que vous utilisez DataLoadOptions.LoadWith? – Marc
Oui à LINQtoSQL et oui j'ai essayé avec DataLoadOptions.LoadWith sur CallNote et AddressChangeRequest, l'activation ou la désactivation ne fait pas de différence. Merci pour votre commentaire, d'autres idées? – kforbesie