c# – 通过表达式获取/设置属性

尝试通过将oracle数据库中的字段映射到对象上的属性来创建数据访问组件.我已经创建了一个带有类型的基础对象,并且像这样调用…

public class Document : DataProviderBase<DataObjects.Document> 
{ 
    // code goes here... 
}

这个基础对象有一个名为AddMapping的方法,它将数据库字段映射到这样的属性……

this.AddMapping<int>("ATD_KEY", "Key")

在这种情况下…

> int是属性的类型
> ATD_KEY是数据库中的字段名称
> Key是DataObjects.Document上的属性名称

代码使用……

typeof(<TParent>).GetProperty(<property name>)

..获取用于获取和设置属性的PropertyInfo.
虽然这很好,但我想在AddMapping方法中添加一些类型为safety和lambda的表达式.我想做以下的事……

this.AddMapping<int>("ATD_KEY", o => o.Key)

..其中o是DataProviderBase提供的类型.这将确保属性Key实际上是int类型,并确保字符串“Key”不是拼写错误或错误的情况,因为第一个AddMapping方法中显示的当前工作代码存在问题.

这可能吗?如果是这样的话?

我发现的最接近的例子就是这个
Dynamic Expression from the Property of the object of the class,但是这仍然是通过字符串而不是表达式引用属性.

最佳答案 您可以使用以下内容:

public void AddMapping<T>(fieldName, Expression<Func<TParent, T>> propExpr)
{
    var memberExpr = (MemberExpression)propExpr.Body;
    PropertyInfo property = (PropertyInfo)memberExpr.Member;
    ...
}
点赞