using System;
using System.Linq.Expressions;
using System.Reflection;
public class Address
{
public string AddressID { get; set; }
public int AddressStagingID { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public string Country { get; set; }
public bool PreferredAddress { get; set; }
public int? DBID { get; set; }
}
class Ideone
{
public static void Main()
{
Address a1 = new Address();
a1.AddressID = "100";
Address a2 = new Address();
a2.AddressID = "200";
Console.WriteLine(IsObjectModified(a1,a2,a=>a.AddressID));
}
public static bool IsObjectModified<TSource, TProperty>(TSource object1, TSource object2, params Expression<Func<TSource, TProperty>>[] props)
{
Type objectType = typeof(TSource);
if (props == null)
return object1.Equals(object2);
foreach (Expression<Func<TSource, TProperty>> prop in props)
{
MemberExpression memberExpression = prop.Body as MemberExpression;
foreach (PropertyInfo pi in objectType.GetProperties())
{
if (!pi.Name.Equals(memberExpression.Member.Name))
{
var valueA1 = pi.GetValue(object1);
var valueA2 = pi.GetValue(object2);
if (valueA1 != null && valueA2 != null)
if (!valueA1.Equals(valueA2))
return true;
}
}
}
return false;
}
}