using System; using System.ComponentModel.DataAnnotations; 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 string GetDisplayAttributeValue(this Expression> expression) { if (expression is null) { throw new ArgumentNullException(nameof(expression)); } var memberExpression = expression.Body as MemberExpression; var displayAttribute = memberExpression.Member.GetCustomAttribute(); return displayAttribute == null ? memberExpression.Member.Name : displayAttribute.Name; } } }