2 de febrero de 2010

LINQ, Distinct Except Intersect Union Concat

En este artículo veremos algunos de los métodos extensores de C# que son usados para realizar consultas LINQ sobre conjuntos de datos.

  1. LINQ Distinct.
  2. LINQ Except.
  3. LINQ Intersect.
  4. LINQ Union.
  5. LINQ Concat.

LINQ Distinct

El método extensor Distinct es usado para eliminar los elementos repetidos de una colección.

int[] nums = { 3, 4, 5, 6, 4, 5, 7 };
 
var lstDistinct = nums.Distinct().ToList();  

En el ejemplo de código anterior partimos de un array de números enteros (nums), y al aplicarle el método extensor Distint, obtenemos como resultado una colección de números sin incluir los duplicados, ver la imagen con el resultado:

LINQ Metodos Extensores Distint

LINQ Except

El método extensor Except devuelve los elementos de la primera colección (lst1), y que no están en la segunda colección pasada como parámetro (lst2).

var lst1 = Enumerable.Range(1, 4).ToList(); // 1,2,3,4 
var lst2 = Enumerable.Range(3, 4).ToList(); // 3,4,5,6  
 
var lstExcept = lst1.Except(lst2).ToList();  

El resultado sería los números que están en lst1 y no están en lst2:

LINQ Metodos Extensores Except

LINQ Intersect

El método extensor Intersect devuelve los elementos que aparecen en ambas colecciones sin repeticiones. Sería la intersección de ambos conjuntos.

var lst1 = Enumerable.Range(1, 4).ToList(); // 1,2,3,4 
var lst2 = Enumerable.Range(3, 4).ToList(); // 3,4,5,6  
 
var lstIntersect = lst1.Intersect(lst2).ToList();

El resultado sería (3, 4):

LINQ Metodos Extensores Intersect

LINQ Union

El método extensor Union es usado para combinar 2 colecciones IEnumerable<T>.

var lst1 = Enumerable.Range(1, 4).ToList(); // 1,2,3,4 
var lst2 = Enumerable.Range(3, 4).ToList(); // 3,4,5,6  
 
var lstUnion = lst1.Union(lst2).ToList();  

El resultado sería la combinación de ambas listas de números, quitando los valores repetidos (3, 4):

LINQ Metodos Extensores Union

LINQ Concat

El método extensor Concat es usado para combinar 2 colecciones IEnumerable<T>, el resultado obtenido se diferencia de Union en que  los elementos repetidos se mantendrán en el resultado de la consulta.

var lst1 = Enumerable.Range(1, 4).ToList(); // 1,2,3,4 
var lst2 = Enumerable.Range(3, 4).ToList(); // 3,4,5,6  
var lstConcat = lst1.Concat(lst2).ToList();

El resultado sería el siguiente:

LINQ Metodos Extensores Concat

Artículos Relacionados: