0

データセットDs1とデータセットDs2があり、DS1にはProduct_ID、製品情報があり、ds2にはProduct_ID、product_typeがあります。

一致するproduct_idについて、Product_tye列をds2からds1に追加します。

注:Product_idはds 1の主キーではありません。結果セットには、同じproduct_idを持つ多くの製品が含まれています。ds 2では、product_idは一意です。また、これらのデータブルは、異なるサーバー上の2つの異なるデータベースからのものであり、異なる資格情報を持っているため、SQL結合を使用できません。

これを実現するためにlinqを使用しようとしましたが、目的の出力が得られませんでした。何かが足りない場合は、修正してください。

DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
//After both the datatble has values, using linq to add datatble columsn, 

DataTable result = (from t1 in dt1.AsEnumerable()
                            join t2 in dt2.AsEnumerable() on t1.Field<string>("productID") equals t2.Field<string>("productID")
                            select t1).CopyToDataTable();
4

2 に答える 2

0

簡単な例を作成しました。あなたがしなければならないことは、私のコードから列名を自分のコードで変更することです。

        DataTable table1 = new DataTable();
        DataTable table2 = new DataTable();
        table1.Columns.Add("id", typeof(int));
        table1.Columns.Add("name", typeof(string));
        table2.Columns.Add("id", typeof(int));
        table2.Columns.Add("age", typeof(int));

        table1.Rows.Add(1, "mitja");
        table1.Rows.Add(2, "sandra");
        table1.Rows.Add(3, "nataška");

        table2.Rows.Add(1, 31);
        table2.Rows.Add(3, 24);
        table2.Rows.Add(4, 46);

        DataTable targetTable = table1.Clone();
        //create new column
        targetTable.Columns.Add("age");

        var results = from t1 in table1.AsEnumerable()
                      join t2 in table2.AsEnumerable() on t1.Field<int>("id") equals t2.Field<int>("id")
                      select new
                      {
                          ID = (int)t1["id"],
                          NAME = (string)t1["name"],
                          AGE = (int)t2["age"]
                      };

        foreach (var item in results)
            targetTable.Rows.Add(item.ID, item.NAME, item.AGE);

いずれにせよ、変数の型(int、string、...)の定義には注意してください!!! それが役に立てば幸い。

于 2012-04-25T18:35:26.043 に答える
0

両方のテーブルを選択する

DataTable result = (from t1 in dt1.AsEnumerable()
                        join t2 in dt2.AsEnumerable() on t1.Field<string>("productID")  
                                     equals t2.Field<string>("productID")
                        select new {t1,t2}
                    ).CopyToDataTable();

または選択した列を選択する

DataTable result = (from t1 in dt1.AsEnumerable()
                        join t2 in dt2.AsEnumerable() on t1.Field<string>("productID") 
                                      equals t2.Field<string>("productID")
                        select new {
                         productId = t1.productID, 
                         col2 = t1.col2,...,
                         productType = t2.pruductType
                    ).CopyToDataTable();

注:productIDタイプはtypeである必要があると思うので、その場合はintにint置き換えてくださいstring

于 2012-04-25T18:35:29.677 に答える