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