2017-03-08 63 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將被視爲不是實際的列 –