此代码如何提高效率。

XBodhi. 2013-08-28 02:00:59
#region 业务逻辑层实体和数据层模型类相互自动赋值。

/// <summary>
///
/// </summary>
/// <typeparam name="TInputModel"></typeparam>
/// <typeparam name="TResult"></typeparam>
/// <param name="model"></param>
/// <returns></returns>
protected virtual TResult ModelToEntity<TInputModel, TResult>(TInputModel model)
where TInputModel : class
where TResult : BaseEntity, new()
{
TResult result = new TResult();
Type resultType = typeof(TResult);
IDictionary<MappingDataEntityPropertyAttribute, PropertyInfo> dataEntityPropertiesDic = ExtractMappingDataAttribute<TInputModel>.GetProperties<MappingDataEntityPropertyAttribute>();
if (dataEntityPropertiesDic != null)
foreach (var prop in dataEntityPropertiesDic)
resultType.GetProperty(prop.Key.MappingDataEntityPropertyName, BindingFlags.Public).SetValue(result, prop.Value.GetValue(model, null), null);
return result;
}

/// <summary>
///
/// </summary>
/// <typeparam name="TInputEntity"></typeparam>
/// <typeparam name="TResult"></typeparam>
/// <param name="entity"></param>
/// <returns></returns>
protected virtual TResult EntityToModel<TInputEntity, TResult>(TInputEntity entity)
where TInputEntity : BaseEntity
where TResult : class,new()
{
TResult result = new TResult();
Type resultType = typeof(TResult);
IDictionary<MappingDataFieldAttribute, PropertyInfo> dataFieldPropertiesDic = ExtractMappingDataAttribute<TInputEntity>.GetProperties<MappingDataFieldAttribute>();
IDictionary<MappingDataEntityPropertyAttribute, PropertyInfo> dataEntityPropertiesDic = ExtractMappingDataAttribute<TResult>.GetProperties<MappingDataEntityPropertyAttribute>();
if (dataFieldPropertiesDic != null)
foreach (var prop in dataFieldPropertiesDic)
{
var key = dataEntityPropertiesDic.Keys.Where(k => k.MappingDataEntityPropertyName == prop.Key.MappingDataFieldName).First();

resultType.GetProperty(prop.Key.MappingDataFieldName, BindingFlags.Public).SetValue(result, dataEntityPropertiesDic[key].GetValue(entity, null), null);
}
return result;
}
#endregion


/// <summary>
/// <para>功能描述:提取出被标记有MappingDataAttribute对象的成员。</para>
/// <para> 创建人:Joe。</para>
/// <para>创建日期:2013-07-25。</para>
/// <para>  版权:Copyright ©right; Archstarcn。</para>
/// </summary>
/// <typeparam name="T">被提取标记有MappingDataAttribute的对象类型。</typeparam>
public class ExtractMappingDataAttribute<T> where T : class
{
/// <summary>
/// 方法描述:获取typeof(TEntity)中标有TAttribute的属性。
/// </summary>
/// <typeparam name="TAttribute">由MappingDataAttribute派生出来的数据操作层实体对象类型属性的特性类型。</typeparam>
/// <returns>返回具有一一对应的typeof(TEntity)中标有MappingDataFieldAttribute的属性的字典。</returns>
public static IDictionary<TAttribute, PropertyInfo> GetProperties<TAttribute>() where TAttribute : MappingDataAttribute
{
IDictionary<TAttribute, PropertyInfo> propertyInfoDic = null;
PropertyInfo[] properties = typeof(T).GetProperties();
if (properties.Length != 0)
{
propertyInfoDic = new Dictionary<TAttribute, PropertyInfo>();
foreach (PropertyInfo prop in properties)
{
object[] attributes = prop.GetCustomAttributes(typeof(TAttribute), true);
if (attributes.Length == 0)
continue;
propertyInfoDic.Add(attributes[0] as TAttribute, prop);
}
}
return propertyInfoDic;
}
...全文
133 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
rtdb 2013-08-28
  • 打赏
  • 举报
回复
现在是什么速度啊导致你不满意?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧