我有一个数据表,其中包含动态创建的列:
Name | Role | Comm w1 | Role | Comm w2 | .... | Total Comm |
我想获取包含Comm
的所有列索引。
预期结果应为:
2
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);
}
}
这样,您可以按照自己的意愿使用索引列表。