如何从数据表获取列索引,列名称包含类似' ColumnName'

时间:2017-02-08 16:40:40

标签: c# linq lambda datatables

我有一个数据表,其中包含动态创建的列:

Name | Role | Comm w1 | Role | Comm w2 | .... | Total Comm |

我想获取包含Comm的所有列索引。

预期结果应为:

2
4
...

4 个答案:

答案 0 :(得分:4)

您可以使用LINQ轻松完成此操作。

首先我们需要将Columns转换为DataColumn,因为LINQ需要它为IEnumerable<DataColumn>,但是Columns为DataColumnCollection。然后将列限制为包含&#34; Comm&#34;的列,然后选择每列的序数,然后将其作为列表。

List<int> columnIndexes = dt.Columns.Cast<DataColumn>()
    .Where(column => column.ColumnName.Contains("Comm"))
    .Select(column => column.Ordinal).ToList();

答案 1 :(得分:2)

您的问题不清楚您想要输出的内容,是否只想将列的位置打印到屏幕上,或者以稍后使用它们的方式存储它们。

此外,这是一个非常简单的解决方案..如果不是那个,那么我就不会参与..所以为了将来的参考,请提供您尝试过的和您期望的内容。它可以帮助所有参与尝试帮助您找到解决方案的人。如果您遇到任何问题,请参考"How to ask a good question"

using System;
using System.Data;
using System.Xml;

public class Program
{
    public static void Main()
    {
        var dt = new DataTable { Columns = { "Name", "Role", "Comm w1", "Comm w2",  "Total Comm"}};


        foreach(DataColumn column in dt.Columns){
            if(column.ColumnName.Contains("Comm")){
                Console.WriteLine(column.Ordinal.ToString());
            }
        }
    }
}


// Output:

// 2
// 3
// 4

如果有帮助,请告诉我。

答案 2 :(得分:0)

下面应该做你需要的事情

foreach (DataColumn col in dataTable.Columns)
{
       if (col.ColumnName.Contains("Comm"))
       {
         var index = col.Ordinal;          
       }
 }

但如上所述,最好先尝试一下。

答案 3 :(得分:0)

其他答案是正确的,它会得到你所要求的,但我不认为他们如何使用它们是对的。我会做这样的事情:

List<int> indexes = new List<int>();
foreach (DataColumn column in dataTable.Columns)
{
    if (column.ColumnName.Contains("Comm"))
    {
      indexes.Add(column.Ordinal);          
    }
}

这样,您可以按照自己的意愿使用索引列表。