对C#中以特殊名称开头的所有列进行计数

本文关键字:开头 | 更新日期: 2023-09-27 17:58:56

我有一个DataTable,所有列都像:

B0_1 A1_1 B0_2 A1_2 B0_3 A1_3 B0_4 A1_4

如何只计算以A1_开头的列?

我可变地包含A1_x,如下所示:

nameCol + n.ToString() + "_" +

注意:在这个例子中,你可以看到A1_1 -> A1_4,但4是随机数,大约从1->9。

对C#中以特殊名称开头的所有列进行计数

我建议使用Linq:

  DataTable table = ...
  int result = table.Columns
    .OfType<DataColumn>()
    .Count(column => column.ColumnName.StartsWith("A1_")); 

Regex是匹配修复后限制(A1_x1 < x < 9)的一个选项:

DataTable dt = new DataTable();
dt.Columns.Add("A1_a"); // out
dt.Columns.Add("A1_6"); // in
dt.Columns.Add("A1_5"); // in
dt.Columns.Add("A1_7"); // in
dt.Columns.Add("A1_0"); // out
dt.Columns.Add("A1_1"); // out
dt.Columns.Add("A1_9"); // out
// count result is: 3
var count = (from col in dt.Columns.OfType<DataColumn>()
             where Regex.IsMatch(col.ColumnName, "A1_[2-8]")
             select col).Count();

您需要添加using System.Text.RegularExpressions;才能使用Regex类型。

使用LINQ

int count = table.Columns.Cast<DataColumn>()
                  .Count(c => c.ColumnName.StartsWith("A1_"));

使用foreach

int count = 0;
foreach(DataColumn dc in table)
{
    if (dc.ColumnName.StartsWith("A1_"))
        count++;
}