private static PropertyInfo GetPropertyInfo<TTarget, TPropertyType>(Expression<Func<TTarget, TPropertyType>> property)
{
if (property == null)
{
throw new ArgumentNullException(nameof(property));
}
if (property.Body is UnaryExpression unaryExp)
{
if (unaryExp.Operand is MemberExpression memberExp)
{
return (PropertyInfo) memberExp.Member;
}
}
else if (property.Body is MemberExpression memberExp)
{
return (PropertyInfo) memberExp.Member;
}
throw new ArgumentException($"The expression doesn't indicate a valid property. [ {property} ]");
}
}