11 Stimmen

Erstellen Sie Elemente aus 3 Sammlungen mit Linq

Ich habe 3 Collections mit genau der gleichen Anzahl von Elementen.

Ich muss eine neue Collection basierend auf den Werten dieser 3 Collections erstellen.

Beispiel:

List list1;
List list2;
List list3;

List list4;

public class Item
{
   public double Value1{get;set;}
   public double Value2{get;set;}
   public double Value3{get;set;}
}

Ich versuche dies mit Linq zu erreichen.

Ich habe versucht:

    var query = from pt in list1
                from at in list2
                from ct in list3
                select new Item
                           {
                               Value1 = pt,
                               Value2 = at,
                               Value3 = ct
                           };

Aber ich habe eine OutOfMemoryException bekommen, meine 3 Listen sind riesig.

Einige Hilfe?

0voto

Joshua Rodgers Punkte 5147

Sie können etwas Ähnliches wie folgt ausprobieren:

 var combined = list1.Select((x, i) => new Item {Value1 = x, Value2 = list2.ElementAt(i), list3 = range3.ElementAt(i)});

Wenn Sie dies immer auf Listen durchführen werden, können Sie .ElementAt(i) durch den [i] Indexer ersetzen.

0voto

Arno Kalkman Punkte 1

Wenn Sie sicher sind, dass alle Listen die gleiche Größe haben, sollten Sie eine for-Schleife verwenden:

        List combinedList = new List(list1.Count);

        for (int i = 0; i < list1.Count; i++)
        {
            combinedList.Add(new Item()
            {
                Value1 = list1[i],
                Value2 = list2[i],
                Value3 = list3[i]
            });
        }

Diese Lösung ist sehr einfach und leicht verständlich, kein LINQ erforderlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X