using System; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Linq.Expressions; using System.Reflection; namespace Infrastructure.Extensions { public static class ExpressionExtensions { public static string GetPropertyName(this Expression> expression) { if (expression is null) { throw new ArgumentNullException(nameof(expression)); } return (expression.Body as MemberExpression).Member.Name; } //public static string MemberName(this Expression> expression) //{ // var memberExpression = expression.Body as MemberExpression; // if (memberExpression == null) // throw new InvalidOperationException("Expression must be a member expression"); // return memberExpression.Member.Name; //} //public static T GetAttribute(this ICustomAttributeProvider provider) // where T : Attribute //{ // var attributes = provider.GetCustomAttributes(typeof(T), true); // return attributes.Length > 0 ? attributes[0] as T : null; //} public static string GetDisplayAttributeValue(this Expression> expression) { if (expression is null) { throw new ArgumentNullException(nameof(expression)); } var memberExpression = expression.Body as MemberExpression; var displayAttribute = memberExpression.Member.GetCustomAttributes().FirstOrDefault(o => o.GetType() == typeof(DisplayAttribute)); return displayAttribute == null ? memberExpression.Member.Name : ((DisplayAttribute)displayAttribute).Name; } } }