【问题标题】:Get columns name from a table in database从数据库中的表中获取列名
【发布时间】: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


【解决方案1】:

typeof(Company).GetProperties() 根本没有获取表列的名称 - 它正在获取用于表示该表的 C# 类/实体的属性名称。您是否已经有一个流程来保证您的 C# 实体的属性名称与表的列名完全匹配?如果是这样,您可以执行相同的原则(但您需要按名称查找类型,而不是使用 typeof(Company),这有多种方法)。如果没有,则需要实际查询数据库以查找列名。

【讨论】:

    【解决方案2】:

    据我所知,您可以使用Type 参数。

    public List<string> GetColumnNames(Type tablename)
    {
    
        var names = tablename.GetProperties().Select(p => p.Name).ToArray();
    
        return names.ToList();
    }
    

    【讨论】:

    • tablename 具有误导性 - 除非他想要的表已经由他用来从数据库中获取对象的任何 orm 映射器作为 Class 提供,否则这不会有多大好处。
    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 2014-05-27
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多