tutorial sintaxis method expresiones c# .net linq

c# - expresiones - combinación externa izquierda en la sintaxis lambda/method en Linq



linq c# (2)

Estás cerca. Lo siguiente seleccionará PID , CID y Text para cada niño, y PID , CID = -1 y Text = "[[Empty]]" para cada padre sin hijos:

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);

Posible duplicado:
¿Cómo se realiza una unión externa izquierda utilizando métodos de extensión linq?

No puedo encontrar un ejemplo de unión externa izquierda de Linq lambda (con métodos de extensión), al menos, no es claro.

Digamos que tengo la siguiente tabla:

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

Quiero unirme a los padres con hijos, y por cada niño desaparecido, quiero que el valor predeterminado para el texto sea "[[Vaciar]]". ¿Cómo puedo hacer esto con la sintaxis de linq lambda?

Actualmente tengo los siguientes:

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? });


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]]" }

Con lambda:

class ChildResult { public int PID { get; set; } public int? CID { get; set; } public string 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]]" } } );