jointure externe gauche dans la syntaxe lambda / method dans Linq

Dupliquer possible:
Comment effectuez-vous une jointure externe gauche en utilisant les méthodes d’extension linq

Je ne trouve pas d’exemple de jointure externe gauche de Linq lambda (avec méthodes d’extension), du moins, pas clair.

Disons que j’ai le tableau suivant:

Parent { PID // PK } Child { CID // PK PID // FK Text } 

Je souhaite rejoindre Parent avec enfant et, pour chaque enfant manquant, je souhaite que la valeur par défaut de Text soit “[[Vide]]”. Comment puis-je faire cela avec la syntaxe linq lambda?

J’ai actuellement les éléments suivants:

 var source = lParent.GroupJoin( lChild, p => p.PID, c => c.PID, (p, g) => new // ParentChildJoined { PID = p.PID; // How do I add child values here? }); 

Tu es proche. Les éléments suivants sélectionneront les PID , CID et le Text pour chaque enfant, et les PID , CID = -1 et Text = "[[Empty]]" pour chaque parent sans enfant:

 var source = lParent.GroupJoin( lChild, p => p.PID, c => c.PID, (p, g) => g .Select(c => new { PID = p.PID, CID = c.CID, Text = c.Text }) .DefaultIfEmpty(new { PID = p.PID, CID = -1, Text = "[[Empty]]" })) .SelectMany(g => g); 
 from p in Parent join c in Child on p.PID equals c.PID into g from c in g.DefaultIfEmpty select new { p.PID, CID = c != null ? (int?)c.CID : null, // Could be null Text = c != null ? c.Text : "[[Empty]]" } 

Avec lambda:

 class ChildResult { public int PID { get; set; } public int? CID { get; set; } public ssortingng Text { get; set; } } lParent.SelectMany(p => p.Childs.Any() ? p.Childs.Select(c => new ChildResult() { PID = c.PID, CID = c.CID, Text = c.Text }) : new [] { new ChildResult() { PID = p.PID, CID = null, Text = "[[Empty]]" } } );