2016-09-29 3 views
0

어떻게 표현식을 동적으로 작성합니까?PropertyInfo에서 Expression을 동적으로 작성하십시오.

나는 사용자 정의 EditorFor 있습니다

public static class MvcExtensions 
{ 
    public static MvcHtmlString GSCMEditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, QuestionMetadata metadata) 
    { 
     return System.Web.Mvc.Html.EditorExtensions.EditorFor(html, metadata.Expression<TModel, TValue>()); 
    } 
} 

을 그리고 다음과 같이 호출 할 :

@foreach (var questionMetaData in Model.MetaData) 
    { 
     @Html.GSCMEditorFor(questionMetaData); 
    } 

내 QuestionMetaData 클래스는 다음과 같습니다

public class QuestionMetadata 
{ 
    public PropertyInfo Property { get; set; } 

    public Expression<Func<TModel, TValue>> Expression<TModel, TValue>() 
    { 
     return ///what; 
    } 
} 

그리고 나는 이 초기화 :

public IList<QuestionMetadata> GetMetaDataForApplicationSection(Type type, VmApplicationSection applicationSection) 
    { 
     var props = type.GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(ApplicationQuestionAttribute)) && 
              applicationSection.Questions.Select(x => x.Name).ToArray().Contains(prop.Name)); 

     var ret = props.Select(x => new QuestionMetadata { Property = x }).ToList(); 

     return ret; 
    } 

PropertyInfo 개체에서 표현식을 만들려면 어떻게해야합니까?

+0

는 표현이 해당 속성의 값을 반환해야할까요? –

답변

0

난 당신이 뭔가를하려는 생각 :

public class QuestionMetadata 
{ 
    public PropertyInfo PropInfo { get; set; } 

    public Expression<Func<TModel, TValue>> CreateExpression<TModel, TValue>() 
    { 
     var param = Expression.Parameter(typeof(TModel)); 
     return Expression.Lambda<Func<TModel, TValue>>(
      Expression.Property(param, PropInfo), param); 
    } 
} 


public class TestClass 
{ 
    public int MyProperty { get; set; } 
} 

시험 :

QuestionMetadata qm = new QuestionMetadata(); 
qm.PropInfo = typeof(TestClass).GetProperty("MyProperty"); 
var myFunc = qm.CreateExpression<TestClass, int>().Compile(); 


TestClass t = new TestClass(); 
t.MyProperty = 10; 

MessageBox.Show(myFunc(t).ToString()); 
+0

추가 정보를 추가 할 수 없습니다. '편집을 제출하는 동안 오류가 발생했습니다.' –

관련 문제