System.Linq.Dynamic ( http://msdn.microsoft.com/en-us/vstudio//bb894665.aspx ) というクラスを使用しています。動的な Linq クエリを定義するために使用されます。実行時に定義できるように、クエリを動的にする必要があります。
transというオブジェクトにトランザクション データを格納しています。データは、AccountNumber (文字列) と Value (10 進数) の 4 つのフィールドを持つ非常に単純です。
私は次のようなクエリを実行しています:
var dynamic = trans.AsQueryable()
.GroupBy("new(AccountNumber)", "it")
.Select(@"new( Key.AccountNumber as groupId,
Sum(Value) as groupTotal,
it as data)");
これは驚異的に機能し、次のような構造の結果が得られます。
[
{
"groupId": 15,
"groupTotal": 5912.52,
"data": [
{
"AccountNumber": 15,
"Value": 14.25
},
...
]
},
...
]
私がやりたいことは次のようなものです:
var dynamic = trans.AsQueryable()
.GroupBy("new(AccountNumber)", "it")
.Select(@"new( Key.AccountNumber as groupId,
ToArray(Value) as groupList,
it as data)");
最終的には、次のような結果が得られます。
[
{
"groupId": 15,
"groupList": [14.25, 300.23, 63.88, 2767.08, 1383.54, 1000.54, 383.00],
"data": [
{
"AccountNumber": 15,
"Value": 14.25
},
...
]
},
...
]
そのようなことをサポートできるように Dynamic.cs を変更するにはどうすればよいですか?
2 つのクエリの違いは、Sum(Value) は groupTotal として、 ToArray(Value) は groupList として、Sum は機能しますが、現在 ToArray は機能しないことに注意してください。
このタスクを達成するには、いくつかの拡張メソッドなどが必要になることはわかっています。残念ながら、Linq、Lambda、および拡張メソッドに関する私のスキルは初心者レベルです。