Mit .Enthält() auf eine Eigenschaft in einer Liste
Habe ich eine Liste der Aktivität. In der Activity-Klasse wird eine ID-Eigenschaft (eine Guid für Argumente Willen). Ich möchte prüfen, ob in dieser Liste eine Tätigkeit im es mit einer Guid, die ich habe. Vielmehr als das:
foreach(Activity activity in ActivityList)
{
if(activity.Id == GuidToCompare)
//Code here
}
Ist es ein effizienter Weg, um das gleiche Ergebnis zu erzielen wie könnte ich, wenn ich gerade eine Liste von Guids (statt einer Liste von Aktivität) und zu verwenden .Enthält()?
Ich habe eine Liste von ein struct namens ActivityAndPO. In diese Struktur ist eine Guid.
Ich habe eine Liste von PO ist. In der PO-Klasse ist eine Guid.
Möchte ich eine Schleife durch alle Objekte in der die ActivityAndPO Liste, wo die Guid gibt es in der Liste der PO ist.
InformationsquelleAutor | 2011-12-01
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher.
Aber da
Id
impliziert es wird bei den meisten 1 Aktivität:Werfen Sie einen Blick auf die LINQ können Sie ersetzen Sie es mit Ihrem code:
ActivityList.Any(i => i.Id == GuidToCompare);
finden alle Aktivitäten-Objekte mit der angegebenen GUID, die Sie verwenden können:
Wenn Sie sich für nur eine Id einer Zeit, es gibt keine effizientere Art und Weise.
Wenn Sie suchen für die Ids, die mehrfach bauen Sie ein HashSet :
Wenn Sie brauchen, um zu finden, die eine Instanz der Aktivität, die Sie erstellen können ein Wörterbuch (funktioniert nur, wenn die Id eindeutig ist) :
Andere Lösung ist die Verwendung von Linq mit Wo/FirstOrDefault/Alle auf die Id nicht effizienter sein als die ihrige.
Ich noch Nicht getestet, aber ich bin mir ziemlich sicher, dass dies funktionieren sollte:
MSDN Jeder : http://msdn.microsoft.com/en-us/library/bb534972.aspx
Nur zu bieten Ihnen alle Möglichkeiten, wie Sie können, schreiben Sie diese Abfrage mit
Linq
Nun, es ist bis zu Ihnen zu wählen, die besser lesbar snippet 😉
Für diejenigen, die nicht verwenden können, LINQ: