什么C#/ Linq代码在不知道其类型的情况下复制两个对象之间的所有匹配属性名称值?

Zac*_*ott 5 c# reflection

我有一个众所周知的POCO类客户从我的方法返回.但是,我只填充由不断变化的Expression p => new {p.id,p.name}指定的属性,作为方法的参数.

不知何故,我需要复制这两个对象之间的所有匹配字段.

var returnObject = IList<Customer>();
var partialFieldObject = DC.Customers.Select( expParameter); // wont know the fields

foreach( var partialRecord in partialFieldObject)
{    foreach (var property in partialRecord // Pseudo code)
     {
         returnObject[property] = property.value; // More Pseudo code
     }
}
End result is a strongly typed Customer POCO returned that only has the selected fields populated with values.
Run Code Online (Sandbox Code Playgroud)

dah*_*byk 17

一些简单的反射可以解决这个问题,假设这些属性与...上的属性partialFieldObject完全对齐(区分大小写)Customer...

void SetProperties(object source, object target)
{
    var customerType = target.GetType();
    foreach (var prop in source.GetType().GetProperties())
    {
        var propGetter = prop.GetGetMethod();
        var propSetter = customerType.GetProperty(prop.Name).GetSetMethod();
        var valueToSet = propGetter.Invoke(source, null);
        propSetter.Invoke(target, new[] { valueToSet });
    }
}
Run Code Online (Sandbox Code Playgroud)


Pre*_*gha 6

您可以使用AutoMapper - 我认为它是为了完成这些工作而构建的

  • @ Dr.Zim查看API,您可以使用CreateMap函数的通用形式,也可以使用基于参数的函数,它可以传递类型.所以你可以做'AutoMapper.Mapper.CreateMap(source.GetType(),destination.GetType())` (2认同)