2016-08-31 4 views
2

Ich bin nicht sehr gut in LINQ und ich denke, dass dieses Problem damit gelöst werden könnte.LINQ - Suche zwischen IList und Liste der Strings

Ich habe eine Liste von Objekten:

IList<Aclass> allADs; 

Klasse:

public static class Aclass 
{ 
    private string myName { get; set; } 
    //And more attributes. 
} 

Und ich habe eine Liste von Strings:

List<string> lstGroups = new List<string>(); 

An diesem Punkt in meinem Code sowohl meine Liste der Objekte und die Liste der Strings sind voll. Was ich will, ist eine Liste von Aclass, die die Eigenschaft myName mit den Strings der Liste übereinstimmt. Die Liste der Strings hat einzigartige Elemente, es gibt keine Wiederholungen.

Antwort

7

Verwendung Contains:

var res = lstAclass.Where(a => lstGroups.Contains(a.MyName)).ToList(); 

Wenn lstAclass viele Elemente hat, können Sie die Suche beschleunigen, indem eine HashSet der Gruppennamen Konstruktion vor, diese Abfrage ausgeführt wird:

var setGroups = hew HashSet<string>(lstGroups); 
var res = lstAclass.Where(a => setGroups.Contains(a.MyName)).ToList(); 
+0

Vielen Dank Herr, nun, ich habe eine Variation, aber ich weiß nicht, ob ich einen neuen Beitrag erstellen müssen. Darf ich Sie im Kommentarbereich fragen und können Sie das beantworten? – user3442470

+1

@ user3442470 Wenn Ihr Follow-up ausreichend unterschiedlich ist, posten Sie es bitte als separate Frage und geben Sie einen Link dazu in einem Kommentar zur Antwort ein. – dasblinkenlight

3

Beachten Sie, dass die Enumerable.Contains Methode führt eine Groß-und Kleinschreibung Gleichheitsvergleich.

Wenn Sie Groß- und Klein ignorieren wollen, dann StringComparer.OrdinalIgnoreCase hinzufügen:

var matches = allADs.Where(a => lstGroups.Contains(a.myName, StringComparer.OrdinalIgnoreCase)).ToList(); 
+1

Das ist SEHR wichtig, danke, dass du das gebracht hast. +1 Wusste nicht, es führt Groß-und Kleinschreibung Vergleich. – user3442470

Verwandte Themen