我正在使用名为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和扩展方法的技能处于初学者水平。