using System.Linq.Expressions;
public static void Main()
var source = new MyDto { Name = "bar" };
var target = new MyBusinessObject { Name = "foo" };
var hasChanged = target.Set(t => t.Name, source.Name);
Console.WriteLine(hasChanged);
public static class Mapper
public static bool Set<TTarget, TValue>(this TTarget target, Expression<Func<TTarget, TValue>> targetProperty, TValue sourceValue)
var actualValue = targetProperty.Compile().Invoke(target);
if (actualValue.Equals(sourceValue))
var property = (PropertyInfo)((MemberExpression)targetProperty.Body).Member;
property.SetValue(target, sourceValue);
public string Name { get; set; }
public class MyBusinessObject
public string Name { get; set;}