2017-02-22 4 views
-1

Ich habe die folgenden Klassen:Erstellen Sammlung von Objekten, die eine Eigenschaft des Typs Sammlung hat mit Linq

public class File 
{  public string FileId; 
     public <Batch> Batches; 
     public decimal Amount; 
} 

public class Batch 
{  public string FileId; 
     public string BatchCode; 
     public decimal Amount; 
} 

Ich möchte folgendes Ausgabeobjekt erstellen:

public class SummaryFile 
{ 
    public List<File> Files; 
} 

Jetzt habe ich folgendes Liste der Stapelklasse:

List<Batch> batches; 

Nun ist diese Liste wie folgt aussehen würde:

batches[0] = new Batch{ FileId = 1, BatchCode = "A", Amount = 5 }; 
batches[1] = new Batch{ FileId = 1, BatchCode = "B", Amount = 10 }; 
batches[2] = new Batch{ FileId = 2, BatchCode = "C", Amount = 22 }; 

Mein Ausgangsobjekt ist die folgende:

public class SummaryFile 
    { 
     public List<File> Files; 
    } 

Ich würde meine Ausgabe erwarten wie folgt aussehen:

"Files": [ 
    { 
     "FileId": "1", 
     "Batches": [ 
    { 
     "BatchCode": "A", 
     "Amount": 5 
    }, 
    { 
     "BatchCode": "B", 
     "Amount": 10 
    }, 
    ],    
    "FileAmount": 15, 
    }, 
{ 
     "FileId": "2", 
     "Batches": [ 
    { 
     "BatchCode": "C", 
     "Amount": 22 
    }, 
],    
    "FileAmount": 22 
} 
] 

ist es möglich, dies mit Linq zu erreichen, wenn nicht das, was ist der beste Weg, dies zu erreichen? Ich komme vom Mainframe und verwende dafür die Control Break-Verarbeitung. Danke für jede Hilfe.

Antwort

1
var summaryFile = new SummaryFile 
{ 
    Files = batches.GroupBy(p => p.FileId) 
        .Select(p => new File 
        { 
         FileId = p.Key, 
         Batches = p.ToList(), 
         Amount = p.Sum(x => x.Amount) 
        }).ToList() 
}; 
+0

Das hat für mich funktioniert, vielen Dank für das Feedback. – Jason

Verwandte Themen