Grimpi IT Blog

febrero 26, 2008

Diferencias entre Union y Concat en C# 3.0

Filed under: .NET, Linq — grimpi @ 2:11 pm

Ayer trabajando con C# 3.0 y LINQ, me tope con una duda. Cuál es la diferencia entre el método Concat y Union de la lista?

En definitiva, ambos métodos parecen ser muy similares. Agregan el contenido de una lista en otra. Sin embargo, hay una pequeña e importante diferencia. El método Concat, agrega todos los ítems de una lista, mientras que el Union, agrega todos los ítems de la lista que no están en la otra lista.

Para hacerlo más claro, si tuviéramos que hacer la traducción a lenguaje SQL, el Concat es el equivalente al UNION ALL, mientras que Union es equivalente a UNION. Esto se puede ver claro, si usamos Linq to SQL.

Veamos este ejemplo:

List<String> list = new List<string>();
List<String> list2 = new List<string>();
list.Add(“Hola”);
list.Add(“Manuela”);
list.Add(“Jose”);
list2.Add(“Hola”);
list2.Add(“Esteban”);
list2.Add(“Ricardo”);

List<string> query = list.Concat(list2).ToList();
query.ForEach(item => System.Console.WriteLine(item));

La salida en este ejemplo serian 6 registros, o sea, la suma de list + list2.
Pero veamos este ejemplo:

List<string> query = list.Union(list2).ToList();
query.ForEach(item => System.Console.WriteLine(item));

En este caso, la salida serian solo 5 registros. Porque? Porque el item “Hola” se encuentra en las 2 listas. Por lo cual, el método Union no considera el duplicado.

Anuncios

Blog de WordPress.com.