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));