DataTable加入或合并

时间:2012-04-17 15:49:24

标签: c# datatable dataset

我有3个数据表填充了数据集和表适配器/绑定源,我需要运行Join查询或找到另一种获取特定数据的方法。 (数据集包含列出的每个表)

表:

产品表:

Prod_ID    Name    

1          tv
2          couch

消费者表:

Con_Id    Name    City
----------------------
1         Gray    New York
2         Joe     Chicago
3         Steve   Madison

交易表

Tran_Id   Con_ID    Prod_ID    Price
-------------------------------------
1         2         1          900
2         1         2          300

鉴于产品名称,我需要填充每个不同城市的表格以及该产品在该城市的销售量(将该产品的所有价格添加到给定城市的任何消费者)

我真的很难过,无法找到方法。 (我已经尝试了很多) 请帮助,谢谢!

到目前为止Nudiers的做法:

            DataRelation relation = null;
            DataColumn table1Column = null;
            DataColumn table2Column = null;
            DataColumn table3Column = null;

            table1Column = tlobergeDataSet.Tb_Product.Columns[0];
            table2Column = tlobergeDataSet.Tb_Transactions.Columns[3];
            table3Column = tlobergeDataSet.Tb_Consumer.Columns[0];

            relation = new DataRelation("relation", table1Column, table2Column);
            tlobergeDataSet.Relations.Add(relation);

4 个答案:

答案 0 :(得分:2)

    public DataTable MergeTables(DataTable dtFirst, DataTable dtSecond, string CommonColumn)
    {
        DataTable dtResults = dtFirst.Clone();
        int count = 0;
        for (int i = 0; i < dtSecond.Columns.Count; i++)
        {
            if (!dtFirst.Columns.Contains(dtSecond.Columns[i].ColumnName))
            {
                dtResults.Columns.Add(dtSecond.Columns[i].ColumnName, dtSecond.Columns[i].DataType);
                count++;
            }
        }

        DataColumn[] columns = new DataColumn[count];
        int j = 0;
        for (int i = 0; i < dtSecond.Columns.Count; i++)
        {
            if (!dtFirst.Columns.Contains(dtSecond.Columns[i].ColumnName))
            {
                columns[j++] = new DataColumn(dtSecond.Columns[i].ColumnName, dtSecond.Columns[i].DataType);
            }
        }

        dtResults.BeginLoadData();
        foreach (DataRow dr in dtFirst.Rows)
        {
            dtResults.Rows.Add(dr.ItemArray);
        }
        foreach (DataRow dr in dtSecond.Rows)
        {
            foreach (DataRow dr1 in dtResults.Rows)
            {
                if (dr1[CommonColumn].ToString().Equals(dr[CommonColumn].ToString()))
                {
                    foreach (DataColumn c in columns)
                    {
                        dr1[c.ColumnName] = dr[c.ColumnName];
                    }
                }
            }
        }
        dtResults.EndLoadData();
        return dtResults;
    }

答案 1 :(得分:0)

在LINQ中,您可以使用以下语法连接表来查找所需的数据:

from a in keyTable
join b in anotherTable on a.Key equals b.Key
join c in aThirdTable on a.Key equals c.Key
select new
{
    // Anonymous Object Properties using identifier a, b, and c to get data
};

您应该能够获取该片段并生成一个linq查询,该查询将生成包含您需要的特定数据表示的匿名对象。

答案 2 :(得分:0)

试试这个。

DataRelation relation = null;
DataColumn table1Column = null;
DataColumn table2Column = null;
//retrieve column
table1Column = ds.Tables("Table1").Columns(0);
table2Column = ds.Tables("table2").Columns(0);
//relating tables
relation = new DataRelation("relation", table1Column, table2Column);
//assign relation to dataset
ds.Relations.Add(relation);

答案 3 :(得分:0)

您只能在DataRelation对象中关联两个表并从中访问数据  数据集很简单,因为数据已经相关。

        DataRelation relation = null;
        DataColumn table1Column = null;
        DataColumn table2Column = null;
        DataColumn table3Column = null;

        table1Column = tlobergeDataSet.Tb_Product.Columns[0];
        table2Column = tlobergeDataSet.Tb_Transactions.Columns[2];
        table2Column1 = tlobergeDataSet.Tb_Transactions.Columns[1];
        table3Column = tlobergeDataSet.Tb_Consumer.Columns[0];

        relation = new DataRelation("relation", table1Column, table2Column);
        tlobergeDataSet.Relations.Add(relation);

       relation = new DataRelation("relation1", table3Column , table2Column1);
       tlobergeDataSet.Relations.Add(relation);