阿里妈妈,帮你实现网络赚钱梦,流量变成现金!
10-09
02

获取两个DataTable的相同数据

给力技术 - 给您提供最新最全的Web资源       最近做的东西,都是在操作一些DataTable,就写了几个方法,方便以后的使用

      使用Merge合并两个DataTable并去除重复数据,要求两个表的列相同。要实现merge时去除重复数据,得设置新Datatable的主键。
public DataTable GetTable(DataTable FirstTable, DataTable SecondTable)
{
    DataTable ResultTable = FirstTable.Copy();

    if (FirstTable.Columns.Count != SecondTable.Columns.Count)
        return ResultTable;

    DataColumn[] keys = new DataColumn[ResultTable.Columns.Count];
    for (int k = 0; k < ResultTable.Columns.Count; k++)
    {
        keys[k] = ResultTable.Columns[k];
    }
    ResultTable.PrimaryKey = keys;
    ResultTable.Merge(SecondTable);
    return ResultTable;
}

      下面这个函数是获取两个DataTable中共同的数据,然后存到一个新的Datatable中,用到了DataRelation。这个是根据网上的一段代码修改的
public DataTable GetSameRecords(DataTable FirstTable, DataTable SecondTable)
{
    DataTable ResultTable = new DataTable("ResultTable");

    if (FirstTable.Columns.Count != SecondTable.Columns.Count)
        return ResultTable;

    DataSet ds = new DataSet();

    ds.Tables.AddRange(new DataTable[] { FirstTable.Copy(), SecondTable.Copy() });

    DataColumn[] firstColumns = new DataColumn[ds.Tables[0].Columns.Count];
    for (int i = 0; i < firstColumns.Length; i++)
    {
        firstColumns[i] = ds.Tables[0].Columns[i];
    }

    DataColumn[] secondColumns = new DataColumn[ds.Tables[1].Columns.Count];
    for (int i = 0; i < secondColumns.Length; i++)
    {
        secondColumns[i] = ds.Tables[1].Columns[i];
    }

    DataRelation r1 = new DataRelation(string.Empty, firstColumns, secondColumns, false);
    ds.Relations.Add(r1);

    DataColumn[] keys = new DataColumn[firstColumns.Length];
    for (int i = 0; i < firstColumns.Length; i++)
    {
        DataColumn dc = new DataColumn(firstColumns[i].ColumnName, firstColumns[i].DataType);
        ResultTable.Columns.Add(dc);
        keys[i] = dc;
    }
    ResultTable.PrimaryKey = keys;

    ResultTable.BeginLoadData();
    foreach (DataRow parentrow in ds.Tables[0].Rows)
    {
        DataRow[] childrows = parentrow.GetChildRows(r1);
        if (childrows != null && childrows.Length != 0 && ResultTable.Rows.Contains(parentrow.ItemArray) == false)
            ResultTable.LoadDataRow(parentrow.ItemArray, true);
    }
    ResultTable.EndLoadData();

    return ResultTable;
}


[本日志由 老狼 于 2010-09-02 10:58 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
文章标签: c# datatable 代码
网摘收录:
相关日志:
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.