【发布时间】:2017-12-09 22:23:11
【问题描述】:
在我的数据库中,我有许多表,其中一个表被命名为 Company"。其列名如下 ("ComName","ComAddress","ComType" ..etc)
我有一个从 Company 表中获取列名的函数:
public List<string> GetColumnNames(string tablename)
{
var names = typeof(Company).GetProperties().Select(p => p.Name).ToArray();
return names.ToList();
}
到目前为止,一切都很好,但是如果我想获取其他表的列怎么办?所以我必须在这句话中输入新表的名称(在函数中作为“tablename”给出)而不是“Company”:
var names = typeof(Company).GetProperties().Select(p => p.Name).ToArray();
但它是字符串,所以它不起作用。有什么想法吗?
【问题讨论】:
-
这看起来好像您正在运行某种 ORM 包装器,它为您的表创建 C# 对象。您可能还需要将其他表提供给此映射器,以便它为您创建对象。也许您正在使用 EntityFramework?另外:将
.ToArray();更改为.ToList()并直接返回名称 -
您也可以省略
(string tablename)并用()替换它 - 它根本不使用... -
对不起,我不知道什么是 ORM 包装器。但这是我正在做的事情:用户可以选择我的数据库中的一个表,并根据表函数将显示列名.是的,我正在使用 EntityFramework
-
是的,直到现在还没有,但我必须在这句话中使用它代替“公司”:var names = typeof(Company).GetProperties().Select(p => p.Name)。 ToArray();所以它会像: var names = typeof(tablename).GetProperties().Select(p => p.Name).ToArray();
-
ORM - 一种将数据库包装在 C# 类中的软件,因此您可以通过使用创建的类“使用”数据库 - 如果您需要从“typename”转到“Type”您可能需要像这样通过“System.Reflection”:stackoverflow.com/questions/179102/… ...但需要这样做的气味。很糟糕。你可能有某种 DropDown 填充了你的数据库表名称 - 所以“某处”你已经有了一个你想要列的类型列表。
标签: c# asp.net sql-server