Requête Linq entre deux objects de liste

J’ai deux objects:

ObjectA { ssortingng code; ssortingng country; } ObjectB { ssortingng code; ssortingng otherstuff; } 

Et j’ai List et List et j’ai besoin de trouver tous les objects dans List qui contient objectA.Code . Mais n’arrive pas à l’implémenter sur une requête LINQ.

On dirait que vous essayez de trouver toutes les instances de ObjectB qui ont une valeur de code présente dans l’une des valeurs List . Si oui, essayez ce qui suit

 List listA = ...; List listB = ...; var all = listB.Where(b => listA.Any(a => a.code == b.code)); 

Il semble que vous souhaitiez rejoindre la liste des objects ObjectA avec la liste des objects ObjectB de la propriété code . C’est une façon:

 List listOfA = ...; List listOfB = ...; var all = from a in listOfA join b in listOfB on a.code equals b.code select new {a,b}; 

Le résultat est une liste d’objects anonymes, contenant 2 propriétés: a de type ObjectA, b de type ObjectB, avec le même code

Pour faire cela efficacement, vous pouvez d’abord placer les codes dans un HashSet , puis utiliser une requête Contains() pour vérifier si le B en question a un code contenu dans le hashset:

 var codes = new HashSet(listOfAs.Select(x => x.code)); var selectedBs = listOfBs.Where( x=> codes.Contains(x.code)); 

Je mettrais les codes de la liste ObjectA dans un HashSet, sinon votre requête deviendrait une opération O (n 2 ). Comme ceci, il s’agit d’une opération O (n):

 var aList = new List(); var bList = new List(); var aCodes = new HashSet(aList.Select(a => a.code)); var result = bList.Where(b => aCodes.Contains(b.code));