As a side product of some experiments I wrote simple LINQ query that matches properties of two objects and returns these properties as list. The code I wrote is pretty simple and I packed it for you as method. Later I used this code to write my experimental and heavily tuned object-to-object mapper.
- Using LINQ and reflection to find matching properties of objects
- Performance: Using dynamic code to copy property values of two objects
- Performance: Using LCG to copy property values of two objects
- Writing object to object mapper: first implementations
- Writing object to object mapper: moving to generics
- Writing object to object mapper: my mapper vs AutoMapper
- My object to object mapper source released
- Using Roslyn to build object to object mapper
Here is the GetMatchingProperties() method that makes the work.
public IList<PropertyInfo> GetMatchingProperties(object source, object target)
if (source == null)
throw new ArgumentNullException("source");
if (target == null)
throw new ArgumentNullException("target");
var sourceType = source.GetType();
var sourceProperties = sourceType.GetProperties();
var targetType = target.GetType();
var targetProperties = targetType.GetProperties();
var properties = (from s in sourceProperties
from t in targetProperties
where s.Name == t.Name &&
s.PropertyType == t.PropertyType
The method returns only those properties that match by name and type. If both objects have property called Sum and both of them have Sum in different type (let’s say float and decimal) then this property is not returned by this method. Of course, you can extend this method if you like and you can make it much more clever. Simple implementation given here worked for me very well.