簡體   English   中英

如何從數據表中獲取列名包含“ColumnName”的列索引

[英]How to get the columns index from datatable which column name contains like 'ColumnName'

我有一個包含動態創建的列的數據表:

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

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

預期的結果應該是:

2
4
...

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

首先,我們需要將 Columns 轉換為 DataColumn 因為 LINQ 需要它是IEnumerable<DataColumn>但 Columns 是DataColumnCollection 然后將列限制為包含“Comm”的列,然后選擇每列的序數,然后將其設為列表。

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

您的問題不清楚您想要的輸出是什么,您是只想打印列的位置以進行篩選,還是以某種方式存儲它們以備后用。

此外,這是一個非常簡單的解決方案.. 如果不是這樣,那么我就不會參與.. 所以為了將來參考,請提供您已經嘗試過的內容以及您所期待的內容。 它可以幫助所有參與嘗試幫助您找到解決方案的人。 如果您遇到任何問題,請參閱“如何提出一個好問題”

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

如果這有幫助,請告訴我。

下面應該做你需要的

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

但如前所述,最好先嘗試一些東西。

其他答案是正確的,它會讓你得到你所要求的,但我不認為他們如何使用它們是完全正確的。 我會做這樣的事情:

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

通過這種方式,您可以在之后隨意使用索引列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM