2017-03-08 36 views
2

我想选择以字符'hz'开头的DataTable中的所有列。目前,我这样做:C#DataTable选择列名称,如

var uploadTable = dataTable.DefaultView.ToTable(false, "locID", "hz1582", "hz1581", "hz1580", "hz1579", "hz1578", "hz1577", "hz1576", "hz1575", "hz1574", "hz1573", "hz1572", "hz1571"); 

然而,“赫兹”列变量中的每个我我的代码运行的时间,所以我需要选择表中,与赫兹开头的所有列的一些方法。还要注意,'locID'列总是存在并且需要被返回。所以,我需要这样的事情:

var uploadTable = dataTable.DefaultView.ToTable(false, "locID", "hz%"); 

任何想法? 谢谢。

+0

什么意思,你需要选择列?你需要选择哪些列名以'hz'开始?或者你只需​​要选择没有数据的'DataColumn's? –

+0

我还需要选择行。即基于柱名称对数据表进行子集化。 – Cameron

回答

4

我会使用LINQ此任务:

DataTable uploadtable = dataTable.Copy(); 
var removeColumns = dataTable.Columns.Cast<DataColumn>() 
    .Where(c => !c.ColumnName.StartsWith("hz", StringComparison.InvariantCultureIgnoreCase)); 

foreach (DataColumn colToRemove in removeColumns) 
    uploadtable.Columns.Remove(colToRemove.ColumnName); 
+0

谢谢,这看起来就像我需要的! – Cameron

0
string[] columnNames = dt.Columns.Cast<DataColumn>() 
             .Select(x => x.ColumnName).Where(n => n.Contains("hz")).ToArray(); 

    var uploadTable = dataTable.DefaultView.ToTable(false, columnNames); 
+0

你linq不会为_ ** Machzor ** _列名工作吗? –

+0

@ J.SMTBCJ15为什么? –

+0

,因为@azar他说开始不包含,如果列名是Machzor将被视为不是实际的列 –