如何约束2个DataTable列名称

时间:2018-11-28 14:48:13

标签: c# datatable

我正在寻找一种最简单的方法来将两个DataTable约束在列名上...

这是我的代码:

DataTable productsAllColums = ....;
DataTable productsJustColumnsToView = ...;
// they both imported from db and both have same stucture

                for (int i = 0; i < productsAllColums.Columns.Count; i++)
                {
                    for (int k = 0; k < productsJustColumnsToView.Columns.Count; k++)
                    {
                        if (productsAllColums.Columns[i].ColumnName == productsJustColumnsToView.Columns[k].ColumnName)
                            break;
                        else
                            productsAllColums.Columns.RemoveAt(i);
                    }
                }

此解决方案实际上并不起作用...

更新更多示例:

DataTable产品所有列都有列(名称):col1,col2,col3,col4,col5 ....从ab到col60

DataTable产品JustColumnsToView具有(名称)col3,col 14,col22

我所有的数据都已经存在于productsAllColums中,所以我的想法...只需删除客户不希望看到的列;-)

2 个答案:

答案 0 :(得分:0)

要使表的列数受限,可以使用DataView.ToTable方法。 但是,如果您不需要其他数据,也许值得重构,不要首先选择它们?

答案 1 :(得分:0)

我现在有一个解决方案:

DataTable productsAllColums = ....;
DataTable productsJustColumnsToView = ...;

bool columnOK;

for (int i = productsAllColums.Columns.Count - 1; i >= 0; i--)
{
    columnOK = false;
    for (int k = 0; k < productsJustColumnsToView.Columns.Count; k++)
    {
        if (productsAllColums.Columns[i].ColumnName == productsJustColumnsToView.Columns[k].ColumnName)
        {
            columnOK = true;
            break;
        }
    }
    if (!columnOK)
        productsAllColums.Columns.RemoveAt(i);
}

我真的希望有一个更优雅的解决方案...但是现在也可以很好地工作了:-)