Supongamos que tenemos dos arreglos de enteros y necesitamos saber si ambos se intersecan y cuáles son los números que comparten. Con Linq sería algo así:
static void Main(string[] args)
{
int[] x = { 1, 2, 3, 4, 5 };
int[] y = { 2, 4, 6 };
int[] z = x.Intersect(y).ToArray();
System.Diagnostics.Debug.WriteLine("Resultado: " +
string.Join(",", z.Select(s => s.ToString())));
}
¡Simple!Otro ejemplo
Supongamos que tenemos la siguiente clase
public class Empleado
{
public int idEmpleado { get; set; }
public string nomEmpleado { get; set; }
public decimal mtoSalario { get; set; }
}
Tenemos un array de enteros y queremos inicializar una lista de empleados únicamente con los id a partir del array, procedemos así:
static void Main(string[] args)
{
int [] ids = { 1, 2, 3, 4, 5 };
List empleados = ids
.Select(i => new Empleado() { idEmpleado = i })
.ToList();
System.Diagnostics.Debug.WriteLine("Cantidad: " + empleados.Count);
}
Una más. Supongamos que adicionalmente a la clase anterior de tenemos otra correspondiente a clientes
public class Cliente
{
public int idCliente { get; set; }
public string nomCliente { get; set; }
}
Supongamos que comparten un mismo origen, de manera que un cliente y empleado con la misma id, son la misma persona, teniendo dos listas: una de empleados y otra de clientes, queremos saber cuáles empleados también son clientes, entonces:
static void Main(string[] args)
{
//Clientes
List clientes = new List (){
new Cliente() {idCliente=1, nomCliente= "María"},
new Cliente () {idCliente=2, nomCliente="Jose"},
new Cliente() {idCliente=3, nomCliente="David"},
new Cliente() {idCliente=4,nomCliente="Ana"}
};
//Empleados
List empleados = new List(){
new Empleado() {idEmpleado=2, nomEmpleado="Jose", mtoSalario=3500},
new Empleado() {idEmpleado=4, nomEmpleado="Ana", mtoSalario=5500},
new Empleado() {idEmpleado=6, nomEmpleado="Carlos", mtoSalario=3500}
};
//ids de clientes
List idsClientes = clientes.Select(s => s.idCliente).ToList();
//Empleados que son Clientes
List empleadosClientes = empleados
.Where(e => idsClientes.Contains(e.idEmpleado))
.ToList();
System.Diagnostics.Debug.WriteLine("Empleados y Clientes: " +
string.Join(", ", empleadosClientes.Select(c => c.nomEmpleado.ToString())));
}
Como podemos ver son muchas las posibilidades que nos ofrece Linq, o sus Extension Methods para ayudarnos en nuestra labor.