Wie zum Zusammenführen von zwei Listen basierend auf einer Eigenschaft?
Ich habe zwei Listen, eine gefälschte und eine echte, wie:
VOR
//fake (list 1)
{ ID = 1, Year = 2011, X = "" }
, { ID = 2, Year = 2012, X = "" }
, { ID = 3, Year = 2013, X = "" }
//real (list 2)
{ ID = 35, Year = 2011, X = "Information" }
, { ID = 77, Year = 2013, X = "Important" }
Ich Zusammenführen möchten, Sie suchen für das Jahr, das Ergebnis sollte sein:
NACH
{ ID = 35, Year = 2011, X = "Information" }
, { ID = 2, Year = 2012, X = "" }
, { ID = 77, Year = 2013, X = "Important" }
Muss es entfernen von Elementen mit dem gleichen Jahr auf der ersten Liste und fügen Sie das element mit dem entsprechenden Jahr auf der zweiten Liste in die erste Liste, halten die Ordnung.
Wie kann ich es mit Linq?
- vielleicht können Sie klären mit einem vorher - /nachher-Darstellung? Sie haben mich völlig verloren jetzt
InformationsquelleAutor BrunoLM | 2011-10-11
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage, das zu tun, mit einem "left join":
f.X
wenn die Bedingung wahr ist, anstatt anzunehmen, dass es immer einen leeren string, aber ansonsten +1from r in joinResult.DefaultIfEmpty()
zu linq-Methode form?Justin Abfrage ist der effizienteste Weg, es zu tun, aber wenn Sie darum, identische Objekte (und nicht die Schaffung neuer Datensätze aus der Abfrage), man könnte es so machen:
Mit IEnumerable.Union und IEqualityComparer.
P. S. Das Ergebnis wäre ein anderes Ergebnis, wenn im Vergleich zum left join, wenn die echte Liste hatte mehr Elemente (Jahre, die nicht in fake-Liste). Der left join nicht zurückkehren würde, jene Ergebnisse zu erzielen, die eine gewünschte Ergebnis (nicht klar aus der OP).
Statt der Festlegung der fake Liste sich selbst, versuchen, mit Linq tun es für Sie:
Diese produzieren genau das Ergebnis, das du einstellen willst. Sie werden wahrscheinlich brauchen, definieren Sie einen benannten Typ für die Elemente der Liste, obwohl, wie zwei getrennt definierte anonyme Typen nicht implizit konvertiert werden können, auch wenn Sie alle die gleichen member-Typen/Namen.