2011-01-07 4 views
1

현재 코드 숨김에서 컨트롤에 바인딩하고 있습니다. 예를 들어Entity Framework 엔터티 열 이름을 가져 와서 형식을 지정

:

  var ctx = new MyEntities(); 
      var source = from o in ctx.Users 
         select o; 

      myControl.DataSource = source; 
      myControl.DataTextField = "SomeColumn1"; // Can I not typesafe this? 
      myControl.DataValueField = "Somecolumn2"; 
      myControl.DataBind(); 

은 이상적으로는 EF에서 속성 이름을 좀하고 싶습니다. 다른 ORM은 Enum에 사용 가능한 모든 속성 이름을 제공하는 경향이 있습니다. 이것이 EF의 경우가 아닙니까?

+0

가 다시 태그 가치가있을 수도 있습니다, 문제는 EF에 대해 엄격하지? – RichardW1001

답변

1

ORM에 내장 함수가 있는지 여부에 관계없이 리플렉션을 사용하여 직접 확장 메서드로 처리 할 수 ​​있습니다. 확장 방법은 인스턴스에 있기 때문에

myControl.DataSource = source 
myControl.DataTextField = source.First().PropertyName(Function(x) x.SomeColumn1) 
myControl.DataValueField = source.First().PropertyName(Function(x) x.SomeColumn2) 
myControl.DataBind() 

(나는 source.First()를 사용하고 있습니다 :

<Extension()> 
    Public Function PropertyName(Of T, TProperty)(ByVal targetObject As T, ByVal expression As Expression(Of Func(Of T, TProperty))) As String 
     Return DirectCast(expression.Body, Expressions.MemberExpression).Member.Name 
    End Function 

그래서이 당신에게 뭔가를 줄 것이다 : 여기

그것은 VB에 클래스가 아닌 인스턴스의 컬렉션)의

내가 원래 게시물을 참고 C#으로이다 :

,210

그리고

myControl.DataSource = source; 
myControl.DataTextField = source.First().PropertyName(x => x.SomeColumn1); 
myControl.DataValueField = source.First().PropertyName(x => x.SomeColumn2); 
myControl.DataBind(); 
+0

감사합니다. Richard! – DaveHogan

관련 문제