2

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、および拡張メソッドに関する私のスキルは初心者レベルです。

4

0 に答える 0