2009-09-28 10 views
1

J'ai deux listes du même objet. Maintenant, la première liste est remplie de données provenant d'une table de base de données. l'autre liste est remplie de données téléchargées sur un serveur.C# comparaison 2 liste <object>

Exemple:

public class HistoricData { 
public int Id{get;set;} 
public DateTime Date {get;set;} 
public string Name {get;set;} 
public float Impressions {get;set;} 
} 

Donc, dans mon objet J'ai la propriété Id unique. Maintenant, j'ai besoin de vérifier si j'ai des objets dans ma deuxième liste qui ne sont pas dans ma première liste. J'ai pensé que je pouvais le faire à Linq, mais je suis un peu coincé.

var difference = from objHD in objHistoricData 
       join objHDN in objHistoricDataNew on objHD.Id equals objHDN.Id 
       select new {objHDNA = objHDN}; 

Cela renvoie toujours 0.

Répondre

3

utiliser la fonction de LINQ Sauf, ans passe le IEqualityComparer qui compare l'ID.

var difference = a.Except(b, new YouEqualitityComparer()) 
2

Vous devez passer outre Equals et GetHashcode afin que vos types sont comparés par leurs valeurs plutôt que par leurs références.

4
var difference = objHistoricDataNew.Except(objHistoricDataNew, new HistoricDataComparer()); 

(où HistoricDataComparer est un IEqualityComparer<HistoricData>)

0

Je suppose que vous souhaitez sélectionner tous les éléments objHistoricDataNew qui sont différents, que stockées dans objHistoricData?

Alors peut-être quelque chose comme ça:

var difference = objhistoricDataNew.Where(objHDN => objHistoricData.Select(objHD => objHD.Id).IndexOf(objHDN.Id) == -1) 
Questions connexes