2

我正在使用名为 System.Linq.Dynamic 的类(http://msdn.microsoft.com/en-us/vstudio//bb894665.aspx)。它用于定义动态 Linq 查询。我需要我的查询是动态的,以便可以在运行时定义它们。

我将交易数据存储在一个名为trans的对象中。数据非常简单,有 4 个字段:AccountNumber(字符串)和 Value(十进制)。

我正在做这样的查询:

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 以便它可以支持这样的事情?

请注意,这两个查询之间的区别在于Sum(Value) 作为 groupTotal,ToArray(Value) 作为 groupList, Sum 可以工作,但目前 ToArray 不能。

我知道我需要一些扩展方法或类似方法才能完成这项任务。不幸的是,我在 Linq、Lambda 和扩展方法方面的技能还处于初学者水平。

4

0 回答 0