有没有更有效的方式在C#中创建DataTable?

时间:2019-07-11 08:37:53

标签: c#

我的项目中有一个简单的CreateDataTable方法,对我来说似乎有点笨拙且效率低下。它可以工作,但是有没有更简洁的方式编写此代码?

任何提示都非常感谢。谢谢。

    private static DataTable CreateDataTable()
    {

        var table = new DataTable("FileUploads");

        var id = new DataColumn
        {
            DataType = Type.GetType("System.Int32"),
            ColumnName = "Id",
            AutoIncrement = true,
            Unique = true
        };
        table.Columns.Add(id);

        var name = new DataColumn
        {
            DataType = Type.GetType("System.String"),
            ColumnName = "FileName",
            AutoIncrement = false,
            Caption = "FileName",
            ReadOnly = false,
            Unique = false
        };
        table.Columns.Add(name);

        var path = new DataColumn
        {
            DataType = Type.GetType("System.String"),
            ColumnName = "FilePath",
            AutoIncrement = false,
            Caption = "FilePath",
            ReadOnly = false,
            Unique = false
        };

//再插入几列...

        var primaryKeyColumns = new DataColumn[1];
        primaryKeyColumns[0] = table.Columns["Id"];
        table.PrimaryKey = primaryKeyColumns;

        return table;

    }

1 个答案:

答案 0 :(得分:2)

您可以做几件事...

您可以忽略您设置为默认值的值,并为列名和类型使用构造函数参数以减少代码使用。我还将使用typeof(string)而不是Type.GetType("System.String")来提供编译时错误而不是运行时错误。

添加列并内联创建时使用AddRange

摆脱冗长的主键内容,并使用简单的数组分配

这将使您的代码更少,因此出错的可能性也更少。

private static DataTable CreateDataTable()
{
    var table = new DataTable("FileUploads");

    table.Columns.AddRange(new[]{
        new DataColumn("Id", typeof(int))
        {
            AutoIncrement = true,
            Unique = true
        },
        new DataColumn("FileName", typeof(string)),
        new DataColumn("FilePath", typeof(string)),
        // more columns here
    });

    table.PrimaryKey = new []{ table.Columns["id"] };

    return table;
}

我也摆脱了Caption,因为如果没有设置,它默认为列名;)

这不那么冗长,也应该更容易阅读。