您的位置:首页 > 产品设计 > UI/UE

C# GetType().GetProperty(name).SetValue与Expression

2015-06-03 16:05 429 查看
一、简单谈谈GetType().GetProperty(name),一般是知道类的属性名字,再给属性赋值。

代码如下:

<span style="font-size:18px;"> /// <summary>
/// 将指定的列复制给实体对象
/// </summary>
/// <typeparam name="TEntity">实体对象类型</typeparam>
/// <param name="fromEntity">来源实体</param>
/// <param name="toEntity">需要转换的实体</param>
/// <param name="propertySelector">属性选择器</param>
/// <returns></returns>
public static TEntity Mapper<TEntity>(this TEntity fromEntity, TEntity toEntity, Expression<Func<TEntity, object>> propertySelector) where TEntity : class
{
if (propertySelector == null) return toEntity;

var propertyList = ExpressionHelper.GetPropertyByExpress(propertySelector);

if (propertyList == null) return toEntity;

bool IsUpdate = false;
if (!propertyList.Contains("ModifiedTime"))
{
IsUpdate = true;
propertyList.Add("ModifiedTime");
}

foreach (var name in fromEntity.GetPropertyList().Where(p => propertyList.Contains(p)))
{
object value;
if (IsUpdate && name == "ModifiedTime")
{
value = DateTime.Now;
}
else
{
value = fromEntity.GetType().GetProperty(name).GetValue(fromEntity, null);
}
toEntity.GetType().GetProperty(name).SetValue(toEntity, value, null);
}
return toEntity;
}</span>二、 Expression  Lamba表达式之用,主要是用于分析Lamba表达式,想进一步对Lamba表达式进行数据操作
代码如下:

/// <summary>
/// 解析表达式的字段并返回数据库列名
/// </summary>
/// <typeparam name="TEntity">实体对象</typeparam>
/// <param name="expression">表达式树</param>
/// <returns></returns>
public static List<string> GetPropertyByExpress<TEntity>(Expression<Func<TEntity, object>> expression) where TEntity : class
{
List<string> propertyList = new List<string>();

if (expression == null) return propertyList;

if ((expression != null) && (!(expression.Body is NewExpression) || ((expression.Body as NewExpression).Members.Count == 0)))
{
return propertyList;
}

propertyList.AddRange((expression.Body as NewExpression).Members.Select(info => info.Name));

return propertyList;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: