Ich habe zwei Variablen des Typs ILookup. Ich wollte Union oder Concat verwenden, um ihre Werte zu kombinieren und das Ergebnis einer dritten Variablen desselben Typs zuzuordnen. Sowohl Union als auch Concat geben IGrouping zurück. Es muss einfach tot sein, IGrouping in den ILookup zu konvertieren, aber ich kann es einfach nicht !!! :-(IGouping exponiert nur den Schlüssel, also kämpfe ich mit dem zweiten Parameter des Lookup .... Jede Hilfe wird viel, sehr geschätzt.LINQ Konvertieren von IGrouping zu Lookup
Antwort
Ich denke, Sie müssen die Sequenzen zuerst abflachen, zu verwenden ToLookup
:
var lookup = first.Concat(second)
.SelectMany(group => group,
(group, item) => new { Key = group.Key,
Item = item })
.ToLookup(x => x.Key, x => x.Item);
dass die Form der SelectMany
verwendet, die zwei Teilnehmer nimmt: eine auf ein Element in der ursprünglichen Sequenz zu einer Sammelstelle konvertieren, und ein weiteres auf ein Element in der ursprünglichen Sammlung aufzunehmen (dh die Gruppe) und ein Element in der zurückgegebenen Sammlung (dh die Elemente, die mit dem Schlüssel dieser Gruppe übereinstimmen), um zum Ergebniselement zu gelangen Dies ist der einfachste Weg (denke ich!), eine Gruppierung in eine Sequenz von Elementen mit ihren Schlüsseln zu verflachen .
Das obige wird nicht getestet, könnte also völlig falsch sein. Es ist auch relativ ineffizient ... es ist eine Schande, dass es keine Möglichkeit gibt, eine Instanz von Lookup
direkt zu erstellen. Sie könnten natürlich selbst ILookup
implementieren.