【发布时间】:2015-01-29 20:31:43
【问题描述】:
我有这个问题:
Dim test = result.GroupBy(Function(row) groupedindexes.Select(
Function(grpindex) row(grpindex)).ToArray, comp).
Select(Function(g) New groupedresult(g.Key, g.Sum(Function(x) Convert.ToInt32(x(3)))))
目前,我正在构建这个:g.Sum(Function(x) Convert.ToInt32(x(3)))
到目前为止我有这个:
Dim groupparameter = Expression.Parameter(GetType(Linq.IGrouping(Of Object(), Object())), "g")
Dim objectparameter = Expression.Parameter(GetType(Object()), "x")
convertMethod = GetType(System.Convert).GetMethod("ToInt32", New Type() {GetType(Object)})
Dim aggregator_expr As LambdaExpression = Expression.Lambda(expression.Call(convertMethod, Expression.ArrayAccess(objectparameter, Expression.Constant(3))), objectparameter)
Dim aggregator_func = GetType(Enumerable).GetMethods(BindingFlags.Public Or BindingFlags.Static).
Where(Function(m) m.Name = "Sum").Where(Function(m) m.ReturnType.FullName = "System.Int32").First
Dim aggregation As Expression = Expression.Call(aggregator_func, groupparameter, aggregator_expr)
在最后一行,vs 说:
Incorrect number of arguments supplied for call to method 'Int32 Sum(System.Collections.Generic.IEnumerable`1[System.Int32])'
当然,还有一个参数。但是,如果我删除 groupparameter,我会收到另一条错误消息。我该如何纠正这个问题?
谢谢。
编辑:
这里是一个简单的控制台应用程序:
Imports System.Reflection
Imports System.Linq.Expressions
Module Module1
Dim groupparameter = Expression.Parameter(GetType(Linq.IGrouping(Of Object(), Object())), "g")
Dim objectparameter = Expression.Parameter(GetType(Object()), "x")
Dim convertMethod = GetType(System.Convert).GetMethod("ToInt32", New Type() {GetType(Object)})
Dim aggregator_expr As LambdaExpression = Expression.Lambda(
Expression.Call(convertMethod, Expression.ArrayAccess(objectparameter, Expression.Constant(3))), objectparameter)
Dim aggregator_func = GetType(Enumerable).GetMethods(BindingFlags.Public Or BindingFlags.Static).
Where(Function(m) m.Name = "Sum").Where(Function(m) m.ReturnType.FullName = "System.Int32" AndAlso m.GetParameters.Length = 2)(0).
MakeGenericMethod(GetType(System.Func(Of Object(), Integer)))
Sub Main()
Dim aggregation As Expression = Expression.Call(Nothing, aggregator_func, aggregator_expr, groupparameter)
End Sub
End Module
如你所见,我对aggregator_func 做了一些改动。我想调用这个表达式:g.Sum(Function(x) Convert.ToInt32(x(3)))。
我都在一起了,我只需要以正确的顺序调用变量。但我不明白。
编辑:代码可以简单的复制粘贴到vs中看看,有什么问题。
【问题讨论】:
-
其他错误信息是什么?
标签: vb.net linq sum expression-trees