Vérifiez si la liste contient une autre liste

J’ai une liste de parameters comme ceci:

public class parameter { public ssortingng name {get; set;} public ssortingng paramtype {get; set;} public ssortingng source {get; set;} } IEnumerable parameters; 

Et un tableau de chaînes contre lequel je veux vérifier.

 ssortingng[] mySsortingngs = new ssortingng[] { "one", "two"}; 

Je veux parcourir la liste de parameters et vérifier si la propriété source est égale à celle du tableau mySsortingngs. Je peux le faire avec les foreach nesteds mais je voudrais apprendre comment le faire de manière plus agréable car j’ai joué avec linq et comme les méthodes d’extension sur enumerable comme where etc donc les foreachs nesteds se sentent mal. Existe-t-il un moyen plus élégant de linq / lambda / delegete de le faire?

Merci

Vous pouvez utiliser un Any() nested pour cette vérification disponible sur tout Enumerable :

 bool hasMatch = mySsortingngs.Any(x => parameters.Any(y => y.source == x)); 

HashSet sur de plus grandes collections consisterait à projeter des parameters à la source , puis à utiliser Intersect qui utilise en interne un HashSet donc au lieu de O (n ^ 2) pour la première approche (l’équivalent de deux boucles nestedes) dans O (n):

 bool hasMatch = parameters.Select(x => x.source) .Intersect(mySsortingngs) .Any(); 

De plus, en tant que commentaire secondaire, vous devez mettre en majuscule vos noms de classes et noms de propriétés pour les rendre conformes aux directives de style C #.