将Guid转换为字符串的表达式

时间:2012-10-19 19:49:11

标签: c# mapping expression

我需要将对象的所有公共属性复制到另一个类型的另一个对象。由Jon Skeet创建的库MiscUtil包含PropertyCopy类,它非常适合我需要的一件事。我在源对象中有一个属性需要转换为目标对象中的另一个类型(Guid => string)。

PropertyCopy的部分代码:

if (!targetProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType))
{
    //My specific case
    if (sourceProperty.PropertyType == typeof(Guid) && targetProperty.PropertyType == typeof(string))
    {
        //Expression.Bind(targetProperty, [--Convert Guid to string expression??--]);
    }
    else
    {
        throw new ArgumentException("...");
    }                              
}

那么可以创建一个表达式来绑定源属性到目标的转换吗?

2 个答案:

答案 0 :(得分:0)

我认为

Expression.Bind(targetProperty, (Expression<Func<Guid,string>>) (v=>v.ToString()));

会工作......

答案 1 :(得分:0)

下面的代码在将Guid绑定到目标属性之前将其转换为字符串:

if (sourceProperty.PropertyType == typeof(Guid) && targetProperty.PropertyType == typeof(string))
{
    Expression callExpr = Expression.Call(Expression.Property(sourceParameter, sourceProperty), typeof(Guid).GetMethod("ToString", new Type[] { }));
    bindings.Add(Expression.Bind(targetProperty, callExpr));
}