DataTable 删除列并重新排序列
DataTable remove columns and re-order the columns
我想从数据中删除不需要的列table并按预定义的顺序排列列的顺序
例如,我的 table 列如下所示,
Col2|Col1|Col3|Test|Test1|Col5|Col4|Some col name|Col6
我想删除 Test、Test1 和 Some col name 并按数据重新排序table 为以下格式
Col1|Col2|Col3|Col4|Col5|Col6
// I need the below columns
List<string> tableColumns = new List<string>();
tableColumns.Add("Col1");
tableColumns.Add("Col2");
tableColumns.Add("Col3");
tableColumns.Add("Col4");
tableColumns.Add("Col5");
tableColumns.Add("Col6");
List<DataColumn> tblColumns = MyDataTable.Columns.Cast<DataColumn>().ToList();
//Remove unwanted columns
foreach (DataColumn col in tblColumns)
{
if (!tableColumns.Contains(col.ColumnName.Trim()))
{
MyDataTable.Columns.Remove(col);
}
}
现在如何按以下顺序重新排列列?
Col1|Col2|Col3|Col4|Col5|Col6
我尝试了下面的代码,但是如果 table 列中的所有项目都不存在于数据 table 中,它就会失败。
有时数据 table 列名有一些空的 space(例如“ Col1”)
foreach (var col in tableColumns)
{
MyDataTable.Columns[col].SetOrdinal(tableColumns.IndexOf(col));
}
删除不需要的列并重新排列列的最佳方法是什么?
删除不需要的列后,您可以按以下方式对其进行排序:
int index = 0;
foreach (var col in
MyDataTable.Columns
.Cast<DataColumn>()
.OrderBy(x => tableColumns.IndexOf(x.ColumnName))
.ToList())
{
col.SetOrdinal(index);
index ++;
}
这将从 DataTable
中选择列,并按它们在 tableColumns
列表中的相应索引对它们进行排序。
然后它对它们中的每一个调用 SetOrdinal
,每次递增索引。
我认为您的列可能有随机顺序,例如 Col2、Col1、Col3。并且您想重新排列并删除不需要的列,例如 Col1、Col2、Col3。
string[] srr = new string[]{"Col2","Col1","Col3","Test","Test1","Col6","Col4","Some col name","Col5"};
DataTable MyDataTable = new DataTable();
foreach(string col in srr)
{
MyDataTable.Columns.Add(col);
}
List<string> arrayNames = (from DataColumn x in MyDataTable.Columns
select x.ColumnName).ToList();
foreach(var col in arrayNames)
{
if(!col.Contains("Col"))
{
MyDataTable.Columns.Remove(col);
}
else
{
int result = Convert.ToInt32(Regex.Match(col.ToString(), @"\d+$").Value);
MyDataTable.Columns[col].SetOrdinal(result-1);
}
}
这将删除诸如 Test、Test1 之类的列,例如一些列名。没有单词 "Col" 的列(根据您的程序更改逻辑)。然后通过使用正则表达式,它将从列名中提取数字。即来自 "Col1" 的 1,然后根据它重新排列列。
我想从数据中删除不需要的列table并按预定义的顺序排列列的顺序
例如,我的 table 列如下所示,
Col2|Col1|Col3|Test|Test1|Col5|Col4|Some col name|Col6
我想删除 Test、Test1 和 Some col name 并按数据重新排序table 为以下格式
Col1|Col2|Col3|Col4|Col5|Col6
// I need the below columns
List<string> tableColumns = new List<string>();
tableColumns.Add("Col1");
tableColumns.Add("Col2");
tableColumns.Add("Col3");
tableColumns.Add("Col4");
tableColumns.Add("Col5");
tableColumns.Add("Col6");
List<DataColumn> tblColumns = MyDataTable.Columns.Cast<DataColumn>().ToList();
//Remove unwanted columns
foreach (DataColumn col in tblColumns)
{
if (!tableColumns.Contains(col.ColumnName.Trim()))
{
MyDataTable.Columns.Remove(col);
}
}
现在如何按以下顺序重新排列列?
Col1|Col2|Col3|Col4|Col5|Col6
我尝试了下面的代码,但是如果 table 列中的所有项目都不存在于数据 table 中,它就会失败。 有时数据 table 列名有一些空的 space(例如“ Col1”)
foreach (var col in tableColumns)
{
MyDataTable.Columns[col].SetOrdinal(tableColumns.IndexOf(col));
}
删除不需要的列并重新排列列的最佳方法是什么?
删除不需要的列后,您可以按以下方式对其进行排序:
int index = 0;
foreach (var col in
MyDataTable.Columns
.Cast<DataColumn>()
.OrderBy(x => tableColumns.IndexOf(x.ColumnName))
.ToList())
{
col.SetOrdinal(index);
index ++;
}
这将从 DataTable
中选择列,并按它们在 tableColumns
列表中的相应索引对它们进行排序。
然后它对它们中的每一个调用 SetOrdinal
,每次递增索引。
我认为您的列可能有随机顺序,例如 Col2、Col1、Col3。并且您想重新排列并删除不需要的列,例如 Col1、Col2、Col3。
string[] srr = new string[]{"Col2","Col1","Col3","Test","Test1","Col6","Col4","Some col name","Col5"};
DataTable MyDataTable = new DataTable();
foreach(string col in srr)
{
MyDataTable.Columns.Add(col);
}
List<string> arrayNames = (from DataColumn x in MyDataTable.Columns
select x.ColumnName).ToList();
foreach(var col in arrayNames)
{
if(!col.Contains("Col"))
{
MyDataTable.Columns.Remove(col);
}
else
{
int result = Convert.ToInt32(Regex.Match(col.ToString(), @"\d+$").Value);
MyDataTable.Columns[col].SetOrdinal(result-1);
}
}
这将删除诸如 Test、Test1 之类的列,例如一些列名。没有单词 "Col" 的列(根据您的程序更改逻辑)。然后通过使用正则表达式,它将从列名中提取数字。即来自 "Col1" 的 1,然后根据它重新排列列。