none
Comparar 2 Listas de Objetos RRS feed

  • Pregunta

  • Estimados, 

    Quiero consultarles como puedo comparar el atributo 'Descripción' de dos listas de objetos que contienen el mismo tipo de objeto 'IngresoxConsorcio'. 

    Es decir, quiero que en la consulta queden sólo aquellos objetos que no están en las dos listas.

    Se me ocurrió que se puede usar Linq, pero no soy un experto en esto y por esto pido su ayuda.

     

    Muchas gracias!

    lunes, 16 de mayo de 2011 20:29

Respuestas

  • Hola de nuevo,

    Siguiendo el ejemplo que te indicaba, deberías realizar lo siguiente:

    Product[] fruits1 = { new Product { Name = "apple", Code = 9 }, 
    		new Product { Name = "orange", Code = 4 },
    		new Product { Name = "lemon", Code = 12 } };
    
    Product[] fruits2 = { new Product { Name = "apple", Code = 9 } };
    
    //Get all the elements from the first array
    //except for the elements from the second array.
    
    //IEnumerable<Product> except =
    //	fruits1.Except(fruits2);
    var fruits2Names = fruits2.Select(product => product.Name).ToList();
    IEnumerable<Product> except = fruits1.Where(product => !fruits2Names.Contains(product.Name));
    
    foreach (var product in except)
      Console.WriteLine(product.Name + " " + product.Code);
    

    Saludos,

    JA Reyes.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.
    • Marcado como respuesta gabrieler jueves, 26 de mayo de 2011 23:52
    jueves, 19 de mayo de 2011 7:57

Todas las respuestas

  • Podría ser asì:

    //Esto selecciona todas las descripciones de cada objeto existente en una de las colecciones.

    var objetosAComparar = from item in ListIngresoxConsorcio2

                                       select item.Descripcion;

    //Esto selecciona los objetos que no estan en los objetosAcomparar

    var objectosNoExistentes = from item in ListIngresoxConsorcio1

                                          where !IngresoxConsorcio.Contains(item.Descripcion)

                                         select item;

     

    Intenta y nos dices!


    Ingphillip's Prog
    Recetas ASP.NET

    No uses el copy-paste, No es nada sano ni recomendable....


    Si las respuestas son de utilidad y/o responden a tus preguntas es bueno para los foros marcarlas como tal.

    lunes, 16 de mayo de 2011 20:53
  • Hola,

    Puedes utilizar el método except:

    http://msdn.microsoft.com/en-us/library/bb300779.aspx

    Si tienes 2 objetos puedes implementar la interface IEquatable en tu clase, o bien basarte en 2 listas con las descripciones correspondientes.

    Saludos,

    JA Reyes.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.
    martes, 17 de mayo de 2011 8:43
  • Me ocurre que:

    En esta linea where !IngresoxConsorcio.Contains(item.Descripcion) me dice: 'IngresoxConsorcio' does not contain a definition for 'Contains'

    y no logro darme cuenta cual es el problema o reemplazo.

     

    Muchas gracias.

    martes, 17 de mayo de 2011 13:38
  • Hola de nuevo,

    Tienes importado el namespace System.Linq?

    using System.Linq;
    
    
    

    Saludos.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.
    martes, 17 de mayo de 2011 15:12
  • Si esta importado.

    IngresoxConsorcio en mi proyecto es una clase.

     

     

    martes, 17 de mayo de 2011 17:17
  • Hola de nuevo,

    Intenta seguir el ejemplo que te comentaba en mi enlace anterior. Como te decia tienes 2 opciones:

    1. Puedes hacer que tu clase IngresoxConsorcio implemente la interface IEquatable. Con esto podras utilizar Except o cualquier otro método para realizar tu consulta.
    2. Puesdes extraer 2 listas de strings con las descripciones correspondientes y realizar la consulta directamente sobre estas listas.

    Saludos,

    JA Reyes.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.
    miércoles, 18 de mayo de 2011 8:16
  • IEnumerable<BE.IngresoxConsorcio> objetosNoExistentes = listAutomaticos.Except(listReales);

    Usé esa linea de código para la comparación, el problema es que yo quiero comparar solo una propiedad ("descripción") de los objetos de esas listas.

    Además quiero que queden, en una lista (List<BE.IngresoxConsorcio>), los objetos que no tienen la misma "descripción" por eso no me resulta conveniente extraer a string.

    ¿Se puede realizar esto sin complejizar mucho el codigo?

     

    Desde ya muchas gracias JA Reyes!

    miércoles, 18 de mayo de 2011 21:47
  • Hola de nuevo,

    Siguiendo el ejemplo que te indicaba, deberías realizar lo siguiente:

    Product[] fruits1 = { new Product { Name = "apple", Code = 9 }, 
    		new Product { Name = "orange", Code = 4 },
    		new Product { Name = "lemon", Code = 12 } };
    
    Product[] fruits2 = { new Product { Name = "apple", Code = 9 } };
    
    //Get all the elements from the first array
    //except for the elements from the second array.
    
    //IEnumerable<Product> except =
    //	fruits1.Except(fruits2);
    var fruits2Names = fruits2.Select(product => product.Name).ToList();
    IEnumerable<Product> except = fruits1.Where(product => !fruits2Names.Contains(product.Name));
    
    foreach (var product in except)
      Console.WriteLine(product.Name + " " + product.Code);
    

    Saludos,

    JA Reyes.


    Please remember to Vote & "Mark As Answer" if this post is helpful to you.
    Por favor, recuerda Votar y "Marcar como respuesta" si la solucion de esta pregunta te ha sido útil.
    • Marcado como respuesta gabrieler jueves, 26 de mayo de 2011 23:52
    jueves, 19 de mayo de 2011 7:57