2016-12-10 12 views
0

現在、私はいくつかの最適化を行いたいので、私は手動でSQLクエリ(linqなし)を使用しました。既に集計されグループ化されたデータのビルドオブジェクトツリー

+----------+--------+------------+ 
| Location | Client | Amount | 
+----------+--------+------------+ 
| Foo  | Foo1 | 2850180,00 | 
| Foo  | Foo2 | -173103,50 | 
| Foo  | Foo3 | 595316,73 | 
| Bar  | Bar1 | -5264,80 | 
| Bar  | Bar2 | -2884,30 | 
+----------+--------+------------+ 

私は今からオブジェクトツリーを作成したい_ctx.Database.SqlQuery<MyStrongResultModel>(query).ToList()

使用してデータを取得basicly:これは私が得る結果です。

public LocationInfo 
{ 
    public string Location { get; set; } 
    public IEnumerable<ClientInfo> ClientInfoCollection {get; set; } 
} 

public ClientInfo 
{ 
    public string Client { get; set; } 
    public decimal Amount { get; set; } 
} 

私はこのような何かを試してみました:

これは動作しますが、私のデータは既にグループ化して合算されているので、間違ったaproachように思える
data.GroupBy(e => e.Location).Select(locationGroup = new LocationInfo { 
    Location = locationGroup.Key, 
    ClientInfoCollection = locationGroup.GroupBy(e => e.Client).Select(clientGroup => new ClientInfo 
    { 
     Client = clientGroup.Key, 
     Amount = clientGroup.Sum(e => e.Amount) //<-- Actualy this is only one record 
    }) 
}); 

答えて

1

まあは、データが既にグループ化して合算されている場合は、代わりに内部GroupByの簡単なSelectを使用します。

data.GroupBy(e => e.Location).Select(locationGroup = new LocationInfo { 
    Location = locationGroup.Key, 
    ClientInfoCollection = locationGroup.Select(e => new ClientInfo 
    { 
     Client = e.Client, 
     Amount = e.Amount 
    }) 
}); 
+1

おかげでたくさん。 Totalyは今日私のコーヒーを逃した:D –

関連する問題