2017-03-08 9 views
2

DataTable内の文字 'hz'で始まる列をすべて選択します。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'だけを選択する必要がありますか? –

+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である場合は実際にはない列と見なされます –

関連する問題