마스터 정렬 열이 어떤 열인지에 따라 테이블의 보고서 데이터를 계단식으로 정렬 할 수있는 프레임 워크를 만들었습니다. 필드의 속성이 값 유형일 때 중요한 하나의 경우를 제외하고는 대부분 작동합니다. 나는 다음과 같은 오류 메시지가 나타납니다ValueType을 사용한 동적 표현 생성 문제
System.ArgumentException 형식 '선택 System.Int32'의 발현은 반환 형식을 사용할 수 없습니다 '으로 System.Object'
나는 이것이 내가 필요 의미 알고 상자에 ValueType의 값을 입력해야하지만이 특정 상황에서 어떻게해야하는지 완전히 확신 할 수는 없습니다. 일부 연구마다 this SO answer 나는 어떤 식 으로든 Expression.Convert
을 사용해야한다고 생각합니다.
아래 코드는 표현식을 생성하는 코드입니다. 제네릭 형식 매개 변수 T는 데이터의 "행"유형입니다. GetFullSortOrder()
은 단순히 정렬 될 T 유형의 열 (특성)의 이름을 나타내는 문자열 배열을 반환합니다. T에서 선택된 속성이 치형의 경우 Expression.Lambda<Func<T, object>>()
처리시
public IEnumerable<Expression<Func<T, object>>> GetExpressions<T>(string sortedColumn) where T : IReportRecord
{
var columns = GetFullSortOrder(sortedColumn)
var typeParameter = Expression.Parameter(typeof(T));
foreach (var c in columns)
{
var propParameter = Expression.Property(typeParameter, c);
yield return Expression.Lambda<Func<T, object>>(propParameter, typeParameter);
}
}
예외가 발생된다. 런타임까지 유형을 알 수 없을 때 속성 상자에 필요한 값이나 올바른 값을 반환하는 데 필요한 것은 무엇입니까?
그런 다음 'Expression.Lambda <>()'호출에서 사용하십시오. – JNYRanger
@JNYRanger 예, 모든 매개 변수에 대해 수행 할 것입니다.하지만 ref 유형에 대한 변환이 필요하지 않습니다. –
예 참조 유형에는 필수 항목이 아니지만 나중에 모든 유형에 대해 작업 할 때 최적화 할 것입니다. – JNYRanger