调用第一个 LINQ 方法

call First LINQ method

我有这个:

Dim aggregator_func As MethodInfo = Nothing
aggregator_func = GetType(Enumerable).GetMethods(BindingFlags.Public Or BindingFlags.Static).
    Where(Function(m) m.Name = "First").Where(Function(m) m.ReturnType.FullName = "")(0).MakeGenericMethod(GetType(Object))
Dim groupparameter = Expression.Parameter(GetType(Linq.IGrouping(Of Object(), Object())), "g")
Dim aggregation As Expression

我想这样称呼:g.First()(0)

g.First returns 一个对象数组,但我只需要指定索引处的对象(在本例中为 0)。我可以很容易地为索引提供一个常量,但是我怎么能调用上面的表达式呢?

我用谷歌搜索,但没有找到对我有用的东西。

这应该以某种方式补充:

aggregation = Expression.Call(aggregator_func, groupparameter)

谢谢。

编辑:

g 参数是一个 Linq.IGrouping(Of Object(), Object())。这就是为什么 First returns 对象数组。也许,对象数组也可以称为对象,但我认为,现在这并不重要。

所述,像 Enumerable.First 这样的静态方法需要一个空实例作为第一个参数传递。您还需要正确构造通用方法 First。如果不这样做,编译器将不会将聚合类型识别为 Object(),而只是识别为 Object,并且它不会编译

唯一更改的行是 aggregator_func 行,添加了最后两行。

    Dim aggregator_func As MethodInfo = Nothing
    aggregator_func = GetType(Enumerable).GetMethods(BindingFlags.Public Or BindingFlags.Static).
        Where(Function(m) m.Name = "First").Where(Function(m) m.ReturnType.FullName = "")(0).MakeGenericMethod(GetType(Object()))
    Dim groupparameter = Expression.Parameter(GetType(Linq.IGrouping(Of Object(), Object())), "g")
    Dim aggregation As Expression = Expression.Call(Nothing, aggregator_func, groupparameter)
    Dim arrayAccess As Expression = Expression.ArrayAccess(aggregation, Expression.Constant(0))