Suche in einem ListDataRow?

8

Ich habe eine Liste, die ich aus einer DataTabe erstelle, die nur eine Spalte enthält. Nehmen wir an, die Spalte heißt MyColumn . Jedes Element in der Liste ist ein Objekt-Array, das meine Spalten enthält, in diesem Fall nur eine (MyColumn). Was ist die eleganteste Art zu überprüfen, ob das Objekt-Array einen bestimmten Wert enthält?

    
grady 15.06.2010, 08:28
quelle

5 Antworten

9
%Vor%     
VMAtm 15.06.2010, 08:36
quelle
0

Ссылка hat etwas über exists & amp; finden.

    
bergin 15.06.2010 08:32
quelle
0

Wenn Sie diese Suche oft machen sollten, ist es nicht praktisch, LINQ-Ausdruck jedes Mal zu schreiben. Ich würde die Extension-Methode folgendermaßen schreiben:

%Vor%

Und danach suche:

%Vor%     
Pavel Belousov 15.06.2010 08:59
quelle
0

Nun, es hängt davon ab, in welcher Version C # und .NET Sie sind, für 3.5 können Sie es mit LINQ tun:

%Vor%

Damit erhalten Sie sowohl die passenden Zeilen als auch einen Bool, der Ihnen sagt, ob Sie überhaupt welche gefunden haben.

Wenn Sie jedoch LINQ oder die damit verbundenen Erweiterungsmethoden nicht haben, müssen Sie die Liste "old skool" durchsuchen:

%Vor%

Was Ihnen die erste Zeile gibt, die übereinstimmt, kann natürlich geändert werden, um alle übereinstimmenden Zeilen zu finden, wodurch die beiden Beispiele mehr oder weniger gleich wären.

Die LINQ-Version hat jedoch einen großen Unterschied, die IEnumerable, die Sie daraus erhalten, wird zurückgestellt, so dass die Berechnung nicht durchgeführt wird, bis Sie tatsächlich ihre Mitglieder aufzählen. Ich weiß nicht genug über DataRow oder Ihre Anwendung, um zu wissen, ob dies ein Problem sein kann oder nicht, aber es war ein Problem in einem Teil meines Codes, der sich mit NHibernate befasste. Grundsätzlich habe ich eine Sequenz aufgezählt, deren Mitglieder nicht mehr gültig waren.

Sie können Ihre eigenen verzögerten IEnumerables problemlos über die Iteratoren in C # 2.0 und höher erstellen.

    
Skurmedel 15.06.2010 08:54
quelle
0

Ich habe das vielleicht falsch gelesen, aber es scheint, als befänden sich die Daten derzeit in List<object[]> und nicht in einer Datentabelle. Um also die Elemente zu erhalten, die bestimmten Kriterien entsprechen, könnten Sie Folgendes tun:

%Vor%

items wäre Ihre Liste von object []: s und matched wäre ein IEnumerable [] & gt; mit dem Objekt []: s mit dem Wert in.

    
Mikael 15.06.2010 09:25
quelle

Tags und Links