2016-03-25 5 views
0

Ich habe zwei Wörterbuchlisten, auf denen ich Operationen setze. Ich werde zeigen, was ich tue und was ich als Beispiel zu erreichen versuchen:Daten in C# bearbeiten Operationen einstellen

var A = new List<Dictionary<string, int>>(); 
var B = new List<Dictionary<string, int>>(); 

A.Add(new Dictionary <string, int> { {"KeyA",1}, {"KeyB", 2} }); 
A.Add(new Dictionary <string, int> { {"KeyA",3}, {"KeyB", 5} }); 
B.Add(new Dictionary <string, int> { {"KeyA",6}, {"KeyB", 8}, {"KeyC", 11} }); 
B.Add(new Dictionary <string, int> { {"KeyA",3}, {"KeyB", 7}, {"KeyC", 15} }); 

var result = A.Intersect(B, new KeyComparer("KeyA")); 

Das ist mir für Schnitt die Liste von A mit KeyA gibt zurück, und ich bekomme eine einzelne Zeile mit {"KeyA",3}, {"KeyB", 5} als Ergebnis. Was ist, wenn ich {KeyC, 15} von B zu dem Ergebnis hinzufügen möchte, wenn die Kreuzung passiert ist.

Ich hoffe, ich bin klar mit der Frage.

Antwort

0

Wenn ich habe deine Frage richtig verstanden, möchten Sie etwas anderes Element der Sequenz hinzufügen, sobald Sie die Kreuzung getan haben ... und dann, was Sie brauchen, ist Enumerable.Concat:

var result = A.Intersect(B, new KeyComparer("KeyA")) 
       .Concat(B.Last().Where(pair => pair.Key == "KeyC"));