1

データセットとテーブル アダプター/バインディング ソースが入力された 3 つのデータ テーブルがあり、結合クエリを実行するか、特定のデータを取得する別の方法を見つける必要があります。(データセットには、リストされている各テーブルが含まれています)

テーブル:

製品表:

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

4 に答える 4

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;
    }
于 2012-06-25T10:30:27.383 に答える
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クエリを生成できるはずです。

于 2012-04-17T16:00:18.357 に答える
0

DataRelation オブジェクトでは 2 つのテーブルのみを関連付けることができ、データは既に関連付けられているため、データセットからデータにアクセスするのは簡単です。

        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);
于 2012-04-17T16:46:47.280 に答える
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);
于 2012-04-17T16:09:17.547 に答える