这个问题涉及到数据层,因此性能非常重要。否则我会使用Automapper。如果它是IDBConnection,我将使用Dapper。
我想将匿名对象的简单编写转化为POCO并使用编译表达式来表达它。
代码
public class Foo
{
public string Bar{get;set;}
public string Baz{get;set;}
}
public void doStuff()
{
var obj = new{Bar= "My Name, Baz = "Some other data"};
//can I recreate this assignment to foo using expressions?
var foo = new Foo{
Bar = obj.Bar,
Baz = obj.Baz
}
}
(未完整) 到目前为止,我已经...
var props = o.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
foreach (var prop in props)
{
var targetProp = typeof(T).GetProperty(prop.Name);
var targetExp = Expression.Parameter(typeof(T), "target");
var valueExp = Expression.Parameter(prop.PropertyType, "property");
var propExp = Expression.Property(targetExp, targetProp);
var assignExp = Expression.Assign(propExp, valueExp);
var setter = Expression.Lambda<Action<T, object>>(assignExp, targetExp, valueExp).Compile();
}
目前存在的问题
- 如何将setter组合成一个返回编译后委托的方法?
- 当我遍历属性时,如何创建Lambda[Action]泛型类型?
感谢任何和所有的帮助。