使用动态Linq(System.Linq.Dynamic)创建值数组而不是值的总和

时间:2013-03-08 03:47:01

标签: c# visual-studio-2010 linq lambda extension-methods

我正在使用名为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)as groupTotal, ToArray(Value)as groupList,其中Sum将起作用但目前是ToArray不会。

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

0 个答案:

没有答案
相关问题