首页 文章

如何在C#中按范围而不是 Headers 名称引用数据表的列

提问于
浏览
2

我已将excel文件的信息传递到数据表中 . 我必须只选择一部分列来采取行动 . 但是其中四列具有相同的 Headers 名称,因此我无法通过 Headers 名称来引用它们 .

Ex. Data|Name|Service|extra|extra|extra|extra.

我无法更改 Headers 名称,因为excel文件是从程序自动生成的报告 . 到现在为其他功能,我正在选择这样的列:

DataTable dt = xls.ReadExcel(file);
dt = dt.SelectColumns(false, "Date", "Transaction ID", "Service ID", "Service",);

SelectColumns方法是:

public static DataTable SelectColumns(this DataTable dt, bool distinct, params string[] filters)
        {
            DataView dv = new DataView(dt);
            DataTable newdt = dv.ToTable(distinct, filters);
            return newdt;
        }

1 回答

  • 1

    修改扩展方法以接受整数并过滤掉未指定的列 . 您必须迭代集合"right to left",因为它在迭代时会发生变化 . 这也意味着您应该以正确的顺序输入 params (从左到右,意味着最小的第一个)以确保正确的过滤 . 其他方法是在扩展方法中订购 params 集合 .
    还要记住,列使用从零开始的索引,因此第一列为0,而不是1 .

    这适用于快速测试 .

    public static DataTable SelectColumns(this DataTable dt, params int[] filters)
    { 
        for (int i = dt.Columns.Count - 1; i >= 0; i--)
        {
            DataColumn c = dt.Columns[i];
            if (!filters.Contains(c.Ordinal))
            {
                dt.Columns.Remove(c);
            }
        }
        return dt;
    }
    

相关问题