2010-04-06 3 views
2

J'ai une collection de chemins d'image, et une plus grande collection d'objets Image (qui contiennent une propriété path). J'ai le code pour vérifier les images correspondantes, mais s'il y a quatre chemins d'image correspondants (comme c'est le cas dans la première collection), et il y en a moins, comment puis-je obtenir le chemin manquant sans boucles d'écriture?Obtention de différences entre collections dans LINQ

 List<string> ImagesToCheck = new List<string>() 
     { 
      "", 
      "s", 
      "ssdd" 
     }; 

     IEnumerable<HtmlImage> Images = manager.ActiveBrowser.Find.AllControls<HtmlImage>(); 

     var v = from i in Images 
       where ImagesToCheck.Any(x => x == i.Src) 
       select i; 

     if (v.Count() < 3) 
     { 

     } 

donc j'ai besoin d'obtenir les éléments qui ne sont pas dans la collection intitulée v, mais sont en ImagesToCheck. Comment pourrais-je faire cela avec LINQ?

Merci

+0

Recherchez-vous des chemins dans ImagesToCheck qui n'ont pas été utilisés dans les images en tant que .Src? – Lazarus

Répondre

2

Essayez ce ..

var images = from s in ImagesToCheck where !i.Any(c => c.Path == s) select s; 

Quelque chose le long de ces lignes ..

Ian

0

ImagesToCheck.Where (x =>! V.Contains (x))

0
var results = ImagesToCheck.Where(i => !v.Contains(i)); 

Kindn ess,

Dan

+0

'var results = ImagesVersCheck.Where (i =>! V.Contains (thisImage => thisImage.Path == i));'? – ANeves

0
var images = from s in ImagesToCheck where i.All(c => c.Path != s) select s; 
0

Il est un moment que cette réponse a été publiée, mais Linq a Intersection et Except. Le dernier vous donnera tous les éléments de la première collection, sauf ceux qui sont également dans la deuxième collection. Le désavantage est que Except utilise l'opérateur Equals() standard ou un IEqualityComparer<T> et vous correspondez à la propriété Path. Mais finalement, vous serez en mesure d'écrire quelque chose comme:

ImagesToCheck.Except(Images) 

Ce que je pense est assez soigné.

Questions connexes