把一个实体的值,根据名称一样的赋值给另外一个实体,名称不一样的不进行赋值。实体可以是嵌套结构的也可以进行赋值。
/// <summary>
/// 把dto的值全部赋值到entity上的递归函数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="entity"></param>
/// <param name="dto"></param>
/// <returns></returns>
private static object DtoAssignmentEntityRecursion<T>(T entity, object dto) where T : class, new()
{
if (dto == null || entity == null)
{
return entity;
}
System.Reflection.PropertyInfo[] properties = entity.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
System.Reflection.PropertyInfo[] dtoproperties = dto.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
if (properties.Length <= 0)
{
return entity;
}
if (dtoproperties.Length <= 0)
{
return entity;
}
foreach (System.Reflection.PropertyInfo item in properties)
{
foreach (var dtoItem in dtoproperties)
{
if (item.Name == dtoItem.Name)
{
if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String"))
{
object value = dtoItem.GetValue(dto, null);
if (value != null)
item.SetValue(entity, value);
break;
}
else
{
object value = item.GetValue(entity, null);
object dtovalue = dtoItem.GetValue(dto, null);
value = DtoAssignmentEntityRecursion(value, dtovalue);
if (value != null)
item.SetValue(entity, value);
break;
}
}
}
}
return entity;
}