2017-08-07 13 views
0

私は答えを見回し、私がやろうとしていることについては何の効果も見いだせませんでした。2つのデータセットに基づいて機能を実行

私は2つのデータシートを持っています.1つはExcelシートからインポートされたもので、もう1つはC#イベントで作成されたものです。 Datatable 1には、貨物またはキットごとの標識の数量が含まれています。標識の名前/タイプはSVL-01、SVL-02などです。データテーブル2には、これらの同じ標識名/タイプが含まれていますが、各タイプの各単一標識の重みもあります。私はdatatable 1を通じて私の方法を反復しようとしている各項目の重量を計算し、各列の合計の列と合計を配置します。基本的には

- DataTableの1つのColumnNameに= DataTableの2記号名、重み変数は=重量はDataTableの2

に記載されているでしょう、私は正確にイメージをロードしませんでしたかなり確信しています。

Datatable 1

+0

添付画像は、私は完全な解決策を持っていない1 – DaveMcGaha

+0

データテーブル2、ではないですが、 LINQを使用して2つのデータセットを一緒に結合することを検討する必要があります。 – lyrisey

+0

これは私がこれを行う方法を研究している事の一つです。しかし、私はそれらを一緒に追加するとき、私はまだ正しい列の正しい重みを取得するために可変的にインデックスを作成する方法がわかりません。 – DaveMcGaha

答えて

0

は、私はあなたのニーズに近いものを生成するための基礎としてprevious solutionを使用:

/* setup schema and sample data */ 
      DataTable kit = new DataTable("Kits"); 
      kit.Columns.Add(new DataColumn("Kit ID")); 
      kit.Columns.Add(new DataColumn("Sign Type")); 
      kit.Columns.Add(new DataColumn("Sign Count", typeof(int))); 


      DataTable signs = new DataTable("Signs"); 
      signs.Columns.Add(new DataColumn("Sign Type")); 
      signs.Columns.Add(new DataColumn("Sign Weight", typeof(int))); 

      DataRow rowBuffer = kit.NewRow(); 

      rowBuffer["Kit ID"] = "Kit 1"; 
      rowBuffer["Sign Type"] = "SVL-01"; 
      rowBuffer["Sign Count"] = 4; 

      kit.Rows.Add(rowBuffer); 

      rowBuffer = signs.NewRow(); 

      rowBuffer["Sign Type"] = "SVL-01"; 
      rowBuffer["Sign Weight"] = 44; 

      signs.Rows.Add(rowBuffer); 

      DataTable kitWeight = new DataTable(); 
      kitWeight.Columns.Add("Kit Type", typeof(string)); 
      kitWeight.Columns.Add("Kit Weight", typeof(int)); 

      /* join table and produce output set */ 

      var result = from dataRows1 in kit.AsEnumerable() 
         join dataRows2 in signs.AsEnumerable() 
         on dataRows1.Field<string>("Sign Type") equals dataRows2.Field<string>("Sign Type") into lj 
         from r in lj.DefaultIfEmpty() 
         select kitWeight.LoadDataRow(new object[] 
         { 
          dataRows1.Field<string>("Kit ID"), 
          dataRows1.Field<int>("Sign Count") * r.Field<int>("Sign Weight") 
          }, false); 

      /* iterate through results - we could do the multiplication here or like we did in the LINQ up above */ 
      foreach (DataRow v in result) 
       Console.WriteLine(v["Kit Type"] + "\t" + v["Kit Weight"]); 
+0

はこれにショットをつけていただきありがとうございます。 – DaveMcGaha

+0

これは、datatable1の完全な再フォーマットを必要とすると思います。符号タイプは、実際にはデータテーブル1の列ヘッダーです。 – DaveMcGaha

関連する問題