8 de febrero de 2010

LEFT JOIN LINQ

Veamos un ejemplo de implementación de Left Join con LINQ.

LINQ LEFT JOIN Ejemplo

Para nuestro ejemplo partamos del supuesto que tenemos una colección de Facturas, y una segunda con los descuentos asociados a las facturas (No todas las facturas tienen descuentos).

Lo que queremos lograr es obtener una lista con todas las facturas, y en el caso de que tuviera descuento, que este apareciese en dicha lista. El código para lograrlo seria el siguiente:

var lstFacturas = new List<Factura>
                  {
                    new Factura {IdFactura = 1, Importe = 500 },
                    new Factura {IdFactura = 2, Importe = 1200 },
                    new Factura {IdFactura = 3, Importe = 400 },
                    new Factura {IdFactura = 4, Importe = 3500 }
                  };
 
var lstDescuentos = new List<FacturaDescuento>
                    {
                      new FacturaDescuento {IdFactura = 2, Descuento = 20 },
                      new FacturaDescuento {IdFactura = 4, Descuento = 100 }
                    };
 
var lstLeftJoin =
  (from fact in lstFacturas
   join desc in lstDescuentos on fact.IdFactura equals desc.IdFactura into FactDesc
   from fd in FactDesc.DefaultIfEmpty()
   select new
          {
            IdFactura = fact.IdFactura,
            ImporteBase = fact.Importe,
            ImporteACobrar = (fd == null) ? fact.Importe : fact.Importe - fd.Descuento
          }
  ).ToList();

El resultado sería:

LINQ LEFT JOIN