質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

3回答

7765閲覧

foreachの条件文に別のDataTableのデータを順番に入れたい

newtorino

総合スコア47

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/06/08 07:51

いつもお世話になっております。

やりたいことを説明するのが難しいのですが
foreachの条件文に別のDataTableのデータを順番に入れたいです。

C#

1foreach (DataRow dr in DataTable1.Select(id = 30)) 2{ 3}

この30という値をforeachで回す度に、別のDataTable2から順番にもっていきたいのです。

例えば、別のDataTable2に
30
40
56
とデータが入っているとしたら
foreachの
一回目の周回ではidに30
二回目の周回ではidに40
三回目ではidに56
という感じにしたいです。

このようなことを実装することは可能でしょうか?
不可能でも、同じようなことを遠回りでも実装することはできますでしょうか?

説明文がつたなく、大変申し訳無いです。
自分で色々やってみましたがどうしてもわからなくて困っています。
どうか、できるかできないかだけでも、ご回答いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

id は重複しないはずなので wakuwaku さんの書かれた方法で完璧だと思います。
なのでこれは完全に蛇足ですが、LINQ To DataSet だとこう書きます。

C#

1var query = from d2 in DataTable2.AsEnumerable() 2 join d1 in DataTable1.AsEnumerable() 3 on d2.Field<int>("id") 4 equals d1.Field<int>("id") 5 select d1; 6foreach (var d in query) {}

投稿2016/06/09 04:02

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ForEachのループをDataTable2のレコード数回分したければ、ForEachのループを入れ子にすればいいですし(wakuwakuさんが書かれているように)、ForEachのループの各々の実行の度に値を変えたければ、ループの中でカウンタを回せば良いと思います

投稿2016/06/08 18:00

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

forachを入れ子にすれば実現できるでしょう。

C#

1// テストデータ作成 2DataTable DataTable1 = new DataTable(); 3DataTable1.Columns.Add("id", typeof(int)); 4DataTable1.Columns.Add("value", typeof(string)); 5 6DataTable DataTable2 = new DataTable(); 7DataTable2.Columns.Add("id", typeof(int)); 8 9 10DataRow r; 11 12for (int i = 0; i < 10; i++) 13{ 14 r = DataTable1.NewRow(); 15 r["id"] = 30; 16 r["value"] = "30-" + i; 17 DataTable1.Rows.Add(r); 18 19 r = DataTable1.NewRow(); 20 r["id"] = 40; 21 r["value"] = "40-" + i; 22 DataTable1.Rows.Add(r); 23 24 r = DataTable1.NewRow(); 25 r["id"] = 56; 26 r["value"] = "56-" + i; 27 DataTable1.Rows.Add(r); 28} 29 30r = DataTable2.NewRow(); 31r["id"] = 30; 32DataTable2.Rows.Add(r); 33 34r = DataTable2.NewRow(); 35r["id"] = 40; 36DataTable2.Rows.Add(r); 37 38r = DataTable2.NewRow(); 39r["id"] = 56; 40DataTable2.Rows.Add(r); 41 42// foreachを入れ子にする 43foreach (DataRow dr2 in DataTable2.Rows) 44{ 45 foreach (DataRow dr1 in DataTable1.Select(string.Format("id={0}", dr2["id"]))) 46 { 47 System.Diagnostics.Debug.WriteLine(dr1["value"]); 48 } 49}

投稿2016/06/08 08:46

wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newtorino

2016/06/16 04:41

遅くなりましたが、wakuwakuさんの回答で解決しました! ありがとうございます!今後もこの知識を活かして勉強していきたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問