null 이외의 예를 필요로하고 나는 오류 원인을 의심,하지만 난 그것을 알아낼 수 없습니다.expr. 나무 : static 메소드가 null 인스턴스가 필요, 비 정적 방법은 내가 질문을 검색하고 몇 가지 주제를 발견
나는이 표현 부분을 구축하고 싶습니다 :
Function(row) groupedindexes.Select(
Function(grpindex) row(grpindex))
내가 이미 가진 부분 Function(grpindex) row(grpindex)
를 구축 :
Dim fieldselector As Expressions.LambdaExpression
fieldselector = Expression.Lambda(Expression.ArrayAccess(rowParameter, indexParameter), indexParameter)
선언은 다음과 같습니다
Dim rowParameter = Expression.Parameter(GetType(Object()), "Row")
Dim indexParameter = Expression.Parameter(GetType(Integer), "grpindex")
을 지금, 다음과 같이 Select
부분을 만들고 싶습니다.
Dim outerfieldselector As Expressions.LambdaExpression
outerfieldselector = Expression.Lambda(Expression.Call(grpindexes, selectMethod, fieldselector), rowParameter)
선언은 다음과 같습니다
Dim grpindexes As Expression = Expression.Constant(groupedindexes, GetType(System.Collections.Generic.List(Of Integer)))
Dim selectMethod = GetType(Queryable).GetMethods(BindingFlags.Public Or BindingFlags.Static).First(Function(m) m.Name = "Select").MakeGenericMethod(GetType(Object), GetType(System.Func(Of Integer, Object)))
groupedindexes
이 정상 List(Of Integer)
이다.
런타임에서, 내 의견으로는 라인 outerfieldselector=...
에서 위의 오류를 얻을, 그것은 작동합니다. 하나의 인수 (fieldselector
)로 grpindexes
에서 Select
메서드를 호출합니다.
무엇이 문제 일 수 있습니까?
감사합니다.
편집 : http://www.filedropper.com/exptree
편집 II : 여기
간단하고 짧은 콘솔 응용 프로그램 프로젝트 :
Imports System.Reflection
Imports System.Linq.Expressions
Module Module1
Dim rowParameter = Expression.Parameter(GetType(Object()), "Row")
Dim indexParameter = Expression.Parameter(GetType(Integer), "grpindex")
Dim expr As Expression = Nothing
Dim groupedindexes As New List(Of Integer)
Dim grpindexes As Expression = Expression.Constant(groupedindexes, GetType(System.Collections.Generic.List(Of Integer)))
Dim selectMethod = GetType(Queryable).GetMethods(BindingFlags.Public Or BindingFlags.Static).First(
Function(m) m.Name = "Select").MakeGenericMethod(GetType(Object), GetType(System.Func(Of Integer, Object)))
Dim fieldselector As Expressions.LambdaExpression
Dim outerfieldselector As Expressions.LambdaExpression
Sub Main()
groupedindexes.Add(0)
groupedindexes.Add(1)
groupedindexes.Add(2)
fieldselector = Expression.Lambda(Expression.ArrayAccess(rowParameter, indexParameter), indexParameter)
outerfieldselector = Expression.Lambda(Expression.Call(grpindexes, selectMethod, fieldselector), rowParameter)
End Sub
End Module
편집 샘플 프로젝트가이 링크에서 다운로드 할 수 있습니다 3 :
내 생각에, 나는 svick의 도움으로 그것을 얻었다.
Dim selectMethod = GetType(Enumerable).GetMethods(BindingFlags.Public Or BindingFlags.Static).First(Function(m) m.Name = "Select").MakeGenericMethod(GetType(Integer), GetType(Object))
'grpindexes'란 무엇입니까? 문제를 시연하는 짧지 만 완전한 프로그램을 제공하면 도움이 될 것입니다. (단지 최소한의 콘솔 앱입니다.) –
모든 코드를 여기에 복사하는 것이 너무 길기 때문에 간단한 프로젝트를 추가했습니다. grpindexes는 LINQ 쿼리의 그룹화 된 인덱스를 나타냅니다. – derstauner
실제 코드 일 필요는 없습니다. 문제를 보여주는 짧지 만 대표적인 프로그램. –