none
Obtener elementos distintos entre listas string RRS feed

  • Pregunta

  • Hola a todos

    Tengo una duda sobre como obtener elementos distintos entre dos listas, en este caso tengo dos List<string>, una con los elementos validos (listComparer) i la de los valores actuales (listValues).

    Imaginemos que listValues tiene los elementos {"21","26", "26"} y que se deben comparar con los elementos de listComparer {"21"}.

    Para obtener los elementos distintos entre las dos listas uso el método Except que me da los elementos distintos entre las listas, pero solo me devuelve uno de los dos 26 lo que me obliga a hacer el bucle posterior para obtener de nuevo todos los elementos "26" de la lista de valores.

        //Obtener los elementos no válidos
                var lst =
                (
                    from comparer in listValues.Except(listComparer)
                    select comparer
                ).ToList();            

                //Almacenar elementos no válidos en la lista de sobrantes
                foreach (string ok in lst)
                {
                    var lstVal = listValues.FindAll(res => res.Equals(ok));
                    listLeftOver.AddRange(lstVal);      
                }
                listLeftOver.Sort();

    Mi pregunta es, ¿hay alguna forma de obtener todos los elementos "26" sin hacer el último bucle?

    miércoles, 11 de marzo de 2015 10:08

Respuestas

  • hola

    podrias hacer un left join con linq

    Cómo: Realizar operaciones de combinación externa izquierda


    de esta forma podrias tomar los elementos de una lista que tenga o no correspondencia con la otra

    algo como esto

                List<string> listValues = new List<string>() { "21", "26", "26" };
                List<string> listComparer = new List<string>() { "21"};
    
                var result = from item in listValues
                             join item2 in listComparer on item equals item2 into g
                             from joineditem in g.DefaultIfEmpty()
                             where joineditem == null
                             select item;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Marc Julià miércoles, 11 de marzo de 2015 11:44
    miércoles, 11 de marzo de 2015 11:15

Todas las respuestas