public static List <ColumnDefinition> GenerateColumnDefinitions <T>(ActionEnum action) { var columns = new List <ColumnDefinition>(); List <PropertyInfo> columnList = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(true).OfType <ColumnDefinitionAttribute>().DefaultIfEmpty().FirstOrDefault() != null).OrderBy(o => o.GetCustomAttributes(true).OfType <ColumnDefinitionAttribute>().First().Order).ToList(); foreach (PropertyInfo prop in columnList) { foreach (ColumnDefinitionAttribute att in prop.GetCustomAttributes(true).OfType <ColumnDefinitionAttribute>()) { if (att == null) { continue; } if (att.Actions == null || !att.Actions.Contains(action)) { ColumnDefinition column = new ColumnDefinition(); column.Field = prop.Name.ToCamelCase(); column.DisplayName = prop.Name; column.CopyPropertiesValue(att); columns.Add(column); } } } return(columns); }