Gegeben, dass ich eine Sammlung von Objekten und eine Sammlung von Schlüssel = Wert-Paaren habe, wie würde ich ein Lambda (oder, wenn Lambda ist unangemessen, ein anderer Ausdruck), so dass die ursprüngliche Sammlung basierend auf den Einstellungen der zweiten .Verwenden von Lambdas zum Filtern mit einem mehrdimensionalen Array oder einer Karte von Filterparametern?
Beispiel: Eine Sammlung von Missionen und gegeben eine Karte enthält Typ = Flug und Ort = USA, zurück alle Flugmissionen in den USA.
Diese Frage ist in Verbindung mit einer anderen Frage, aber da sie getrennte Dinge sind, habe ich zwei Fragen daraus gemacht.
Angenommen, ich habe so etwas wie:
Dictionary<string, string> filters; //type and location are keys, flight and USA are the values, respectively
List<Mission> missions;
Bestehende Zur Zeit haben wir so etwas wie:
var badIds;
return missions.Where(x => !badIds.contains(x.ids)))
.Select(x => x.ids);
Die Sache ist, in diesem Fall, dass ich bei der Kompilierung wissen, dass ich filternde basierend auf IDs und verwenden Sie eine einzelne Dimension Array wie Sammlung, um es zu tun. Ich möchte zwei Dimensionen verwenden und nicht nur die Werte einschließen, nach denen ich suche, sondern auch den Parameter, nach dem gesucht werden soll, und gleichzeitig die Anzahl der Filtervorgänge basierend auf der Anzahl der Parameter dynamisch erweitern. Sie können eine, die andere, beide, mehr Parameter, weniger, in irgendeiner Kombination usw. angeben (0 Parameter können ein spezieller Fall sein, aber das ist einfach genug).
Ich möchte so etwas wie:
for (KeyValuePair kvp in filters)
{
missions = missions.Where(x => x.(kvp.Key) == kvp.Value);
}
//I'm new to lambdas and C# so this is probably terrible.
Möchten Sie dies auf einem ** bestimmten Typ ** wie Flugmissionen tun? Wenn ja, dann kann es leicht konstruiert werden. Wenn du es super-universal, nicht typbezogen machen willst, dann ist es möglich Reflektionen zu verwenden, aber brauchst du das wirklich? Wie auch immer, es wäre großartig, wenn Sie ein Codebeispiel wie * "Ich habe ** das ** und ich möchte etwas wie ** das **: ..." * zur Verfügung stellen. –
Oft ist Text nicht das beste Medium, um ein Programmierproblem zu erklären. Sie sollten zumindest einen (Pseudo-) Code zeigen und vielleicht haben Sie sogar etwas versucht, und zeigen Sie es dann. –
Wenn Sie dies für einen Webservice benötigen, können Sie sich oData ansehen – harmoniemand