DataRelation:如何比较特定的列 [英] DataRelation: How to compare specific columns

查看:111
本文介绍了DataRelation:如何比较特定的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用此链接中的答案比较两个数据表比较两个数据表,但是当我使用DataRelation函数时,我得到一个错误,即两列的长度都应该匹配.但我只想比较特定的列.

目前我是这样的:

// Using a Dataset to make use of a DataRelation Object
using (DataSet ds = new DataSet())
{
    //Add Tables
    ds.Tables.AddRange(new DataTable[] { dt.Copy(), dataTable.Copy() });

    //Get  First Columns for DataRelation
    DataColumn[] firstcolumns = new DataColumn[7];
    firstcolumns[0] = ds.Tables[0].Columns[0];
    firstcolumns[1] = ds.Tables[0].Columns[1];
    firstcolumns[2] = ds.Tables[0].Columns[2];
    firstcolumns[3] = ds.Tables[0].Columns[3];
    firstcolumns[4] = ds.Tables[0].Columns[4];
    firstcolumns[5] = ds.Tables[0].Columns[5];
    firstcolumns[6] = ds.Tables[0].Columns[6];

    //Get Second Columns for DataRelation
    DataColumn[] secondcolumns = new DataColumn[8];
    secondcolumns[0] = ds.Tables[1].Columns[0];
    secondcolumns[1] = ds.Tables[1].Columns[1];
    secondcolumns[2] = ds.Tables[1].Columns[2];
    secondcolumns[3] = ds.Tables[1].Columns[3];
    secondcolumns[4] = ds.Tables[1].Columns[4];
    secondcolumns[5] = ds.Tables[1].Columns[5];
    secondcolumns[6] = ds.Tables[1].Columns[6];
    secondcolumns[7] = ds.Tables[1].Columns[7];

    //Create DataRelation
    DataRelation r = new DataRelation(string.Empty, firstcolumns, secondcolumns, false);

    ds.Relations.Add(r);

    //Create Columns for return table
    for(int i = 0; i < dt.Columns.Count ; i++ )
    {
        ResultDataTable.Columns.Add(dt.Columns[i].ColumnName, dt.Columns[i].DataType);
    }

    //If first Row not in second, add to return table
    ResultDataTable.BeginLoadData();

    foreach( DataRow parentrow in ds.Tables[0].Rows)
    {
        DataRow[] childrows = parentrow.GetChildRows(r);
        if (childrows != null || childrows.Length != 0)
        {
            ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
        }
    }

    ResultDataTable.EndLoadData();

    ResultDataTable.AsDataView();

    //Export to Excel
    ResultDataTable.WriteXml("data.xls");
}

我想做的是,如果第一列中的所有列都与第二列中的1、2、3、4、5、6、7列匹配,则将所有第二列(包括0)加载到resultdatatable中.

请您建议我该怎么做?

解决方案

我使用LINQ解决了这个问题.在Stackoverflow上获得了一些帮助.以下是我的问题的链接:使用LINQ比较数据表

I am comparing two datatables using the answer in this link Compare two Datatables but when I use the DataRelation function I am getting an error that both columns length should match. but I want to only compare specific columns.

Currently I have it this way:

// Using a Dataset to make use of a DataRelation Object
using (DataSet ds = new DataSet())
{
    //Add Tables
    ds.Tables.AddRange(new DataTable[] { dt.Copy(), dataTable.Copy() });

    //Get  First Columns for DataRelation
    DataColumn[] firstcolumns = new DataColumn[7];
    firstcolumns[0] = ds.Tables[0].Columns[0];
    firstcolumns[1] = ds.Tables[0].Columns[1];
    firstcolumns[2] = ds.Tables[0].Columns[2];
    firstcolumns[3] = ds.Tables[0].Columns[3];
    firstcolumns[4] = ds.Tables[0].Columns[4];
    firstcolumns[5] = ds.Tables[0].Columns[5];
    firstcolumns[6] = ds.Tables[0].Columns[6];

    //Get Second Columns for DataRelation
    DataColumn[] secondcolumns = new DataColumn[8];
    secondcolumns[0] = ds.Tables[1].Columns[0];
    secondcolumns[1] = ds.Tables[1].Columns[1];
    secondcolumns[2] = ds.Tables[1].Columns[2];
    secondcolumns[3] = ds.Tables[1].Columns[3];
    secondcolumns[4] = ds.Tables[1].Columns[4];
    secondcolumns[5] = ds.Tables[1].Columns[5];
    secondcolumns[6] = ds.Tables[1].Columns[6];
    secondcolumns[7] = ds.Tables[1].Columns[7];

    //Create DataRelation
    DataRelation r = new DataRelation(string.Empty, firstcolumns, secondcolumns, false);

    ds.Relations.Add(r);

    //Create Columns for return table
    for(int i = 0; i < dt.Columns.Count ; i++ )
    {
        ResultDataTable.Columns.Add(dt.Columns[i].ColumnName, dt.Columns[i].DataType);
    }

    //If first Row not in second, add to return table
    ResultDataTable.BeginLoadData();

    foreach( DataRow parentrow in ds.Tables[0].Rows)
    {
        DataRow[] childrows = parentrow.GetChildRows(r);
        if (childrows != null || childrows.Length != 0)
        {
            ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
        }
    }

    ResultDataTable.EndLoadData();

    ResultDataTable.AsDataView();

    //Export to Excel
    ResultDataTable.WriteXml("data.xls");
}

What I want to do is if all the columns in firstcolumns match columns 1, 2, 3, 4, 5, 6, 7 in second columns load the all the second columns (including 0) into the resultdatatable

Please can you advice how I can do this?

解决方案

I solved this using LINQ. Got a bit of help on Stackoverflow. Following is the link to my question: Compare datatables using LINQ

这篇关于DataRelation:如何比较特定的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆