计算所有列以C#中的特殊名称开头

时间:2016-07-27 09:35:47

标签: c#

我有一个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是randoms数字,大约是1 - > 9。

3 个答案:

答案 0 :(得分:4)

我建议使用Linq:

  DataTable table = ...

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

答案 1 :(得分:0)

正则表达式是一种匹配修复后限制(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类型。

答案 2 :(得分:0)

使用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++;
}