2014-05-12 2 views
3

EF 모델 클래스가 있습니다. 그 부분 클래스에 대해 MetadataType을 만들었습니다.DataAnnotation 표시 이름을 얻는 방법?

이제는 개체의 속성에 대한 displayname을 모두 C#에서 읽거나 가져와야합니다. 그래서 Excel 헤더 행에서 사용할 수 있습니다.

vwGrid grd = new vwGrid;

[MetadataType(typeof(vwGridMetadata))] 
public partial class vwGrid 
{ 

} 

public class vwGridMetadata 
{ 
    [Display(Name = "Note ID")] 
    public int intNoteID { get; set; } 
    [Display(Name = "Global Number")] 
    public string strGlobalLoanNumber { get; set; } 
    [Display(Name = "Data Source ID")] 
    public Nullable<int> intDataSourceID { get; set; } 
    [Display(Name = "Sample ID")] 
    .... 
} 

여기에 나는 모든 속성을 반복에서 표시 이름 얻을합니다. 그래서 헤더 행과 셀을 능가하도록 추가 할 수 있습니다. 그렇게하는 방법?

답변

10

ReflectionLINQ 당신의 친구

typeof(vwGridMetadata) 
.GetProperties() 
.Select(x => x.GetCustomAttribute<Display>()) 
.Where(x => x != null) 
.Select(x => x.Name); 

주 : 이러한 방법을 사용하기 위해 프로젝트에 System.ReflectionSystem.Linq 네임 스페이스를 포함해야합니다.

+0

좋은 간단하고 좋은 일. 그냥 선생님 .. LOL – Tony

0

ASP.Net 코어 2 :

var listOfFieldNames = typeof(vwGridMetadata) 
        .GetProperties() 
        .Select(f => f.GetCustomAttribute<DisplayAttribute>()) 
        .Where(x => x != null) 
        .Select(x=>x.Name) 
        .ToList();