我目前正在绑定代码隐藏的控件。
例如:
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 :(得分:1)
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();