Gauravsa
Gauravsa

Reputation: 6528

Remove and replace column names DataTable c#

I have a DataTable like this:

        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("A", typeof(string));
        dataTable.Columns.Add("B", typeof(string));
        dataTable.Columns.Add("C", typeof(string));

        List<string> headersToSkip = new List<string>() { "A", "B" };
        Dictionary<string, string> headersToReplace = new Dictionary<string, string>() { { "C", "D" } };

        IEnumerable<DataColumn> queriableColumms = dataTable.Columns.Cast<DataColumn>().AsQueryable().ToList();

        var toBeRemoved = from DataColumn column in queriableColumms
                          where headersToSkip != null && headersToSkip.Contains(column.ColumnName)
                          select column;

        foreach (DataColumn column in toBeRemoved)
        {
            dataTable.Columns.Remove(column);
        }

        if (headersToReplace != null)
        {
            foreach (KeyValuePair<string, string> kvp in headersToReplace)
            {
                foreach (DataColumn column in dataTable.Columns.Cast<DataColumn>().AsQueryable().ToList())
                {
                    if (column.ColumnName.Equals(kvp.Key))
                        column.ColumnName = kvp.Value;
                }
            }
        }

Is it possible to remove columns in DataTable and replace column names with some other column names efficiently.

Upvotes: 0

Views: 849

Answers (1)

Anu Viswan
Anu Viswan

Reputation: 18163

By efficiently, if you mean with less code, you could do the following.

To Remove Columns

List<string> headersToSkip = new List<string>() { "A", "B" };
foreach(var header in headersToSkip)
{
   dataTable.Columns.Remove(header);
}

To Rename Columns,

Dictionary<string, string> headersToReplace = new Dictionary<string, string>() { { "C", "D" } };
foreach(var header in headersToReplace)
{
    dataTable.Columns[header.Key].ColumnName = header.Value;
}

Upvotes: 1

Related Questions