お世話になっております。
現在、VB.NETでの開発を行っています。
その中で、二つのDataTableがあり、SQLでいうところのLEFT JOINのようなことをDataTableで行えないかと思っています。
「AAA」
No. Name Remark
1 ○○○
2 ××× ---
3 △△△
「BBB」
No. Group
1 赤
2 青
3 黄
「NewTable」
No. Name Remark Group
1 ○○○ 赤
2 ××× --- 青
3 △△△ 黄
上記のようにある項目に紐づけて二つのDataTableを一つにしたいです。
分かる方いらっしゃいましたら教えてください。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
確認できていないけど、こんな感じで
Dim ds As New DataSet ds.Tables.Add(AAA) ds.Tables.Add(BBB) ds.Relations.Add("NewTable", AAA.Columns("No"), BBB.Columns("No"))
-追記-
ただ結果のDataTableが欲しいだけなら
前提が
Dim AAA As New DataTable Dim BBB As New DataTable Dim newtable As New DataTable AAA.Columns.Add("No") AAA.Columns.Add("Value") AAA.Rows.Add(1, "a") AAA.Rows.Add(2, "b") AAA.Rows.Add(3, "c") BBB.Columns.Add("No") BBB.Columns.Add("Value") BBB.Rows.Add(1, "A") BBB.Rows.Add(2, "B") BBB.Rows.Add(3, "C") newtable.Columns.Add("No") newtable.Columns.Add("Value1") newtable.Columns.Add("Value2")
みたいなのだと思いますが
Dim joinresult = AAA.AsEnumerable.Select(Function(x) New With { .No = x.Item("No"), .Value1 = x.Item("Value"), .Value2 = BBB.AsEnumerable.Where(Function(y) y.Item("No") = x.Item("No")).FirstOrDefault?.Item("Value") }) For Each item In joinresult.ToList newtable.Rows.Add(item.No, item.Value1, item.Value2) Next
みたいにしてもいいかもしれません
投稿2017/02/10 05:41
編集2017/02/10 22:18総合スコア3939
0
ベストアンサー
多分、もっといい方法があると思うのですが、別の質問のほうも考慮してサンプルを・・・
VB
1 Private Sub Test() 2 Dim ds As New DataSet 3 Dim dt1 As New DataTable 4 Dim dt2 As New DataTable 5 Dim newtable As New DataTable 6 7 dt1.Columns.Add("No") 8 dt1.Columns.Add("T1C1") 9 dt1.Columns.Add("T1C2") 10 dt1.Columns.Add("T1C3") 11 dt1.Columns.Add("T1C4") 12 dt1.Columns.Add("T2No") 13 14 dt2.Columns.Add("No") 15 dt2.Columns.Add("T2C1") 16 dt2.Columns.Add("T2C2") 17 dt2.Columns.Add("T2C3") 18 dt2.Columns.Add("T2C4") 19 20 For i = 0 To 100 21 dt1.Rows.Add(i, String.Format("C1-{0}", i), String.Format("C2-{0}", i), String.Format("C3-{0}", i), String.Format("C4-{0}", i), i + 1000) 22 dt2.Rows.Add(i + 1000, String.Format("T2C1-{0}", i), String.Format("T2C2-{0}", i), String.Format("T2C3-{0}", i), String.Format("T2C4-{0}", i)) 23 Next 24 25 ds.Tables.Add(dt1) 26 ds.Tables.Add(dt2) 27 ds.Relations.Add("Test", dt2.Columns("No"), dt1.Columns("T2No")) 28 29 '結合結果のDataTableを作成 30 newtable.Columns.Add("No") 31 newtable.Columns.Add("T1C1") 32 newtable.Columns.Add("T2C3") 33 34 For Each r As DataRow In dt1.Rows 35 Dim t2r As DataRow = r.GetParentRow("Test") 36 newtable.Rows.Add(r.Item("No"), r.Item("T1C1"), t2r.Item("T2C3")) 37 Next 38 39 '結果を出力 40 For Each r As DataRow In newtable.Rows 41 Console.WriteLine(String.Join(",", r.ItemArray)) 42 Next 43 44 End Sub
投稿2017/02/10 07:10
総合スコア10469
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
二つのDataTableがあり、SQLでいうところのLEFT JOINのようなことを
その「二つのDataTable」をどのように作成したのですか?
もし、SQL Server などの DB から ADO.NET の DataAdapter などを使用して生成したものであれば、DB から直接「SQLでいうところのLEFT JOINのようなことを」して取得してはいかがですか?
投稿2017/02/10 06:22
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/10 06:29
退会済みユーザー
2017/02/10 07:09
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/10 05:45
2017/02/10 05:54
2017/02/10 06:05