C# DataTable选择列,其中列名类似于...

7

我希望能在DataTable中选择以'hz'开头的所有列。目前,我正在这样做:

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

然而,每次运行我的代码时,“hz”列都是可变的,因此我需要一种选择表中所有以“hz”开头的列的方法。请注意,“locID”列始终存在且需要返回。因此,我需要这样做:

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

有什么想法吗? 谢谢。


你需要选择哪些列呢?你需要选择列名以“hz”开头的行吗?还是只需要选择没有数据的“DataColumn”? - Tim Schmelter
我需要选择行。即基于列名对数据表进行子集筛选。 - Cameron
2个回答

9
我会使用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);

谢谢,这看起来正是我所需要的! - Cameron

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

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

你的 LINQ 无法使用“Machzor”列名吗? - J.SMTBCJ15
@J.SMTBCJ15 为什么? - Azar Shaikh
因为@azar说要从不包含的地方开始,如果列名是Machzor,则会被视为实际上不是列。 - J.SMTBCJ15
@J.SMTBCJ15 是的,谢谢。 - Azar Shaikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接