.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Linq.Expressions;
using System.Reflection;
					
public class Program
{
	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))
		{
			return false;
		}
		
		var property = (PropertyInfo)((MemberExpression)targetProperty.Body).Member;
		property.SetValue(target, sourceValue);
		return true;
	}
}

public class MyDto
{
    public string Name { get; set; }
}

public class MyBusinessObject
{
    public string Name { get; set;}
}
;