2017-05-13 13 views
0

OrderBy 작업을 수행하는 정렬 키를 얻기 위해 일반적인 방법을 쓰려고 시도했지만 다음 코드에서 실패했습니다. Func의 키를 얻는 방법

public Func<Q, string> GetSortProperty<Q>(IQueryable<Q> data, string SortColumn) 
{ 
    if (!string.IsNullOrWhiteSpace(sortColumn)) 
    { 
     Func<Q, string> sort = i => i.GetType().GetProperty(sortColumn).GetValue(i, null); 

     return sort; 
    } 

    return null; 
} 

나는 친절하게 도와주세요 다음과 같은 스택 오버플로 질문을
  • How to make select query by string property name in lambda expression?
    • 을 주심을.

      public Func<Q, object> GetSortProperty<Q>(IQueryable<Q> data, string SortColumn) 
      { 
          if (!string.IsNullOrWhiteSpace(SortColumn)) 
          { 
           Func<Q, object> sort = i => i.GetType().GetProperty(SortColumn).GetValue(i, null); 
           return sort; 
          } 
          return null; 
      } 
      

      을 또는 string에 캐스팅 :

      public virtual object GetValue(object obj, object[] index); 
      

      당신은 Func<Q, object>Func<Q, string>의 방법의 유형을 변경할 수 있습니다 다음 GetValue 선언을 바탕으로

    답변

    2

    public Func<Q, string> GetSortProperty<Q>(IQueryable<Q> data, string SortColumn) 
    { 
        if (!string.IsNullOrWhiteSpace(SortColumn)) 
        { 
         Func<Q, string> sort = i => (string)i.GetType().GetProperty(SortColumn).GetValue(i, null); 
         return sort; 
        } 
        return null; 
    } 
    

    또한 귀하가 우리 인 경우 C# 6 나는 이것을 방지하기 위해 다음과 같이 변경하는 것이 좋습니다. NullReferenceException :

    Func<Q, string> sort = i => (string)i.GetType().GetProperty(SortColumn)?.GetValue(i, null); 
    
    +0

    감사합니다. 코드를 사용하려고합니다 ... –