無論ORM是否將其作爲內置函數,您都可以使用反射作爲擴展方法來完成此操作。
這是在VB:
<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
所以這會給你這樣的:
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(),因爲擴展方法是一個實例類,而不是實例的集合)的
而且我注意到您原來的職位是在C#:
[Extension()]
public string PropertyName<T, TProperty>(T targetObject, Expression<Func<T, TProperty>> expression)
{
return ((Expressions.MemberExpression)expression.Body).Member.Name;
}
而且
myControl.DataSource = source;
myControl.DataTextField = source.First().PropertyName(x => x.SomeColumn1);
myControl.DataValueField = source.First().PropertyName(x => x.SomeColumn2);
myControl.DataBind();
可能是值得重新標籤,問題是沒有嚴格的關於EF? – RichardW1001 2011-01-07 11:04:03