2011-05-15 4 views
7

Puis-je utiliser une requête LINQ de fantaisie pour renvoyer un List<FileInfo>, en le passant dans une méthode (List<FileInfo> oldList, List<FileInfo> newList), et voir quelles sont les différences entre les deux listes? Fondamentalement, je veux obtenir une liste de tous les fichiers ajoutés à newList, qui n'étaient pas disponibles dans oldList.Différence entre deux listes <FileInfo>

Répondre

15

Étant donnée une IEqualityComparer pour FileInfo ci-dessous:

public class FileInfoEqualityComparer : IEqualityComparer<FileInfo> 
{ 
    public bool Equals(FileInfo x, FileInfo y) 
    { 
     return x.FullName.Equals(y.FullName); 
    } 

    public int GetHashCode(FileInfo obj) 
    { 
     return obj.FullName.GetHashCode(); 
    } 
} 

Vous pouvez utiliser le code suivant pour trouver la différence entre deux listes:

var allItems = newList.Union(oldList); 
var commonItems = newList.Intersect(oldList); 
var difference = allItems.Except(commonItems, new FileInfoEqualityComparer()); 

pour trouver des articles ajoutés à newList liste, utilisez le code suivant :

var addedItems = newList.Except(oldList, new FileInfoEqualityComparer());