private DbTable CacheTable(Type tableType, string defaultName) { if (!DbTables.ContainsKey(tableType)) { var tableAttr = tableType.GetCustomAttribute <TableAttribute>(); var tableName = tableAttr?.For(x => $"{x.Schema}.{x.Name}") ?? defaultName; var filedTypes = tableType.GetProperties().Where(x => x.CanRead && x.CanWrite).ToArray(); var tableFields = filedTypes.Select(type => new DbTableField { Name = type.Name, DisplayName = DataAnnotationEx.GetDisplayName(type), RuntimeType = type.PropertyType, Index = type.HasAttribute <KeyAttribute>() ? "Key" : type.HasAttribute <CPKeyAttribute>() ? "CPKey" : type.GetCustomAttribute <IndexAttribute>()?.For(x => $"{x.Type} {x.Group?.For(g => $"({g})")}") ?? "", MaxLength = type.GetCustomAttribute <StringLengthAttribute>()?.MaximumLength ?? null, Required = type.HasAttribute <RequiredAttribute>(), ReferenceType = type.GetCustomAttribute <ForeignKeyAttribute>()?.Name.For(name => { return(tableType.GetProperty(name).PropertyType); }), }).ToArray(); var dbTable = new DbTable { Name = tableName, DisplayName = DataAnnotationEx.GetDisplayName(tableType), TableFields = tableFields, }; DbTables[tableType] = dbTable; } return(DbTables[tableType]); }
public static SelectList GetSelectList(Enum @enum) { var fields = @enum.GetType().GetFields().Where(x => !x.IsSpecialName); return(new SelectList(fields.Select(field => new { Value = field.Name, Text = DataAnnotationEx.GetDisplayName(field), }), "Value", "Text", @enum.ToString())); }
public static SelectList GetSelectList <TEnum>() where TEnum : struct { var fields = typeof(TEnum).GetFields().Where(x => !x.IsSpecialName); return(new SelectList(fields.Select(field => new { Value = field.Name, Text = DataAnnotationEx.GetDisplayName(field), }), "Value", "Text")); }
public RowChangeInfo(IEnumerable <PropertyEntry> entries) { foreach (var entry in entries) { Add(entry.Metadata.PropertyInfo.Name, new FieldChangeInfo { Display = DataAnnotationEx.GetDisplayName(entry.Metadata.PropertyInfo), IsModified = entry.IsModified, Origin = entry.OriginalValue, Current = entry.CurrentValue, }); } }
public string GetCsv() { var sb = new StringBuilder(); void appendLine(string[] cols) { sb.AppendLine(cols.Select(x => $"\"{x?.Replace("\"", "\"\"")}\"").Join(",")); } foreach (var table in DbTables.Values) { appendLine(new[] { table.Name, table.DisplayName.For(name => name == table.Name ? "" : name) }); appendLine(new[] { "Field", "Display", "Runtime Type", "Max Length", "Index", "Required", "Reference", "Note" }); foreach (var field in table.TableFields) { appendLine(new[] { field.Name, field.DisplayName, field.RuntimeType.GetSimplifiedName(), field.MaxLength?.ToString(), field.Index, field.Required ? "Required" : "", field.ReferenceType?.For(type => DbTables[type].Name), field.RuntimeType.For(type => { if (type.IsEnum) { var values = type.GetFields().Where(x => x.Name != "value__").Select(x => new { Name = DataAnnotationEx.GetDisplayName(x), LongValue = Convert.ChangeType(Enum.Parse(type, x.Name), typeof(long)), }); var note = values.Select(value => $"{value.LongValue}={value.Name}").Join(" "); return(note); } else { return(""); } }), }); } appendLine(new[] { "" }); } return(sb.ToString()); }
private DbTable CacheTable(Type tableType, string defaultName) { if (!DbTables.ContainsKey(tableType)) { var tableAttr = tableType.GetAttributeViaName("System.ComponentModel.DataAnnotations.Schema.TableAttribute"); var tableName = tableAttr?.GetReflector().For(x => $"{x.Property<string>("Schema").Value}.{x.Property<string>("Name").Value}") ?? defaultName; var filedTypes = tableType.GetProperties().Where(x => x.CanRead && x.CanWrite).ToArray(); var tableFields = filedTypes.Select(type => new DbTableField { Name = type.Name, DisplayName = DataAnnotationEx.GetDisplayName(type), RuntimeType = type.PropertyType, Index = type.HasAttributeViaName("System.ComponentModel.DataAnnotations.KeyAttribute") ? "Key" : type.HasAttributeViaName($"LinqSharp.EFCore.CPKeyAttribute") ? "CPKey" : type.GetAttributeViaName($"LinqSharp.EFCore.IndexAttribute")?.GetReflector().For(x => $"{x.Property<Enum>("Type").Value} {x.Property<string>("Group").Value?.For(g => $"({g})")}") ?? "", MaxLength = type.GetAttributeViaName("System.ComponentModel.DataAnnotations.StringLengthAttribute")?.GetReflector().For(x => x.Property <int>("MaximumLength").Value) ?? null, Required = type.HasAttributeViaName("System.ComponentModel.DataAnnotations.RequiredAttribute"), ReferenceType = type.GetAttributeViaName("System.ComponentModel.DataAnnotations.Schema.ForeignKeyAttribute")?.GetReflector().For(x => { var name = x.Property <string>("Name").Value; return(tableType.GetProperty(name).PropertyType); }), }).ToArray(); var dbTable = new DbTable { Name = tableName, DisplayName = DataAnnotationEx.GetDisplayName(tableType), TableFields = tableFields, }; DbTables[tableType] = dbTable; } return(DbTables[tableType]); }
public string GetHtml() { var sb = new StringBuilder(); sb.AppendLine("<!DOCTYPE html>"); sb.AppendLine("<html>"); sb.AppendLine("<head>"); sb.AppendLine(@"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />"); sb.AppendLine("</head>"); sb.AppendLine("<body>"); void appendLine(string[] cols, string tag = "td") { sb.AppendLine("<tr>"); sb.AppendLine(cols.Select(x => $"<{tag}>{x}</{tag}>").Join("")); sb.AppendLine("</tr>"); } foreach (var table in DbTables.Values) { sb.AppendLine(@"<table style=""border-collapse:collapse; width:100%"" border=""1"">"); sb.AppendLine(@"<col width=""10%"">".Repeat(7)); appendLine(new[] { table.Name, table.DisplayName.For(name => name == table.Name ? "" : name) }); appendLine(new[] { "Field", "Display", "Runtime Type", "Max Length", "Index", "Required", "Reference", "Note" }, "th"); foreach (var field in table.TableFields) { appendLine(new[] { field.Name, field.DisplayName.Flow(StringFlow.HtmlEncode), field.RuntimeType.GetSimplifiedName().Flow(StringFlow.HtmlEncode), field.MaxLength?.ToString(), field.Index.Flow(StringFlow.HtmlEncode), field.Required ? "Required" : "", field.ReferenceType?.For(type => DbTables[type].Name), field.RuntimeType.For(type => { if (type.IsEnum) { var values = type.GetFields().Where(x => x.Name != "value__").Select(x => new { Name = DataAnnotationEx.GetDisplayName(x), LongValue = Convert.ChangeType(Enum.Parse(type, x.Name), typeof(long)), }); var note = values.Select(value => $"<li>{$"{value.LongValue}={value.Name}".Flow(StringFlow.HtmlEncode)}</li>").Join(""); return($"<ul>{note}</ul>"); } else { return(""); } }), }); } sb.AppendLine("</table>"); sb.AppendLine("<p></p>"); } sb.AppendLine("</body>"); sb.AppendLine("</html>"); return(sb.ToString()); }