2017-02-22 9 views
-1

を使用してCollection型のプロパティを持つオブジェクトのコレクションを作成します。今、私は以下のいる私は以下のクラスを持ってLINQの

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

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

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

私は、次の出力オブジェクトを作成したいがバッチクラスの一覧:

List<Batch> batches; 

今、このリストには、次のようになります。

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 }; 

私の出力オブジェクトは以下の通りです:

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

私は私の出力は次のように見えることを期待する:

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

は、それが何をされていない場合のLINQを使用してこれを実現することが可能ですこれを達成する最善の方法は何ですか?メインフレームから来て、私はこれを達成するためにコントロールブレーク処理を使用します。助けてくれてありがとう。

答えて

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

これは私にとってうまくいきました。フィードバックに感謝します。 – Jason

関連する問題