paramType
의 값이 회원의 이름 경우, 다음 실행시에 식 트리를 구축해야이 작업을 수행하는. 이것은 가능합니다.입니다. 그러나 선택하려는 모든 열이 항상 동일한 유형이 아니라면 어색합니다. 이 더 복잡합니다.은 람다에서 튜플을 선택하려고합니다.
static Expression<Func<Application, T>> BuildTupleSelector<T>(
string paramType, Func<T> usedForGenericTypeInference)
{
var m = Expression.Parameter(typeof(Application), "m");
var body = Expression.New(typeof(T).GetConstructors().Single(),
new Expression[] {
Expression.PropertyOrField(m, nameof(Application.ApplicationId)),
Expression.PropertyOrField(m, paramType)
},
new MemberInfo[]
{
typeof(T).GetProperty("ApplicationId").GetGetMethod(),
typeof(T).GetProperty("Value").GetGetMethod()
});
return Expression.Lambda<Func<Application, T>>(body, m);
}
과 : 당신이 여기에 필요한 악마의 양을 보여줍니다이를 시도 할 수 : 솔직히,
편집 ...이 경우 동적 SQL을 작성하는 쉬울 것 사용 :
var details = DetailsRepository
.Find(application => application.Created > compareDate)
.Select(BuildTupleSelector(paramType,
() => new { ApplicationId = 123, Value = "abc" }))
.Distinct();
자세한해야 이제 익명의 종류 int ApplicationId
및 string Value
와.
paramType을 열의 이름으로 바꾸면됩니다. Select입니다. paramtype = "Address"라고 가정하고 두 번째 요소가 m.Address가되도록합니다. 희망이 내 질문을 지 웁니다. –