C#でデータテーブル同士の結合について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

C#でデータテーブル同士の結合について

#1

投稿記事 by 海Sea » 10年前

いつもありがとうございます
またSQL関連ですが・・・

c#.net 2013にて
DataTable同士の結合を行おうとしています。
Relationsを使用して、
DataSetに追加したテーブルで

コード:

test.Relations.Add("testre", testtd.Columns["hoge"], testtd2.Columns["hoge"],false);
 test.Tables["A"].Columns.Add("B", typeof(System.String), "Parent(testre).hoge");
としようと思ったのですが、
親リレーションシップが見つかりませんというエラーが出てしまい
原因が特定できず、詰まってしまいました。
確かに設定しているはずのリレーションが見つからない場合は、
一般的に何が原因と考えられるのでしょうか?
もしくは、他にDataTable同士を結合する方法があれば、
ご教授頂けると幸いです。

アバター
ookami
記事: 214
登録日時: 14年前
住所: 東京都

Re: C#でデータテーブル同士の結合について

#2

投稿記事 by ookami » 10年前

testtd2 == Tables["A"] でしょうか?
親と子が逆になっているとか、その辺だと思いますが...

アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: C#でデータテーブル同士の結合について

#3

投稿記事 by 海Sea » 10年前

ookami さんが書きました:testtd2 == Tables["A"] でしょうか?
親と子が逆になっているとか、その辺だと思いますが...
ありがとうございます。
Tables["A"]は、Relationで指定したものしか駄目なんですね。
動作を誤認してました。
ということは、これだと結合したものを新しいDataTableとして扱うことができないのでしょうか・・・
なんだかRalationしたものに対して、かなり誤解しているかもしれませんね・・・

アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: C#でデータテーブル同士の結合について

#4

投稿記事 by 海Sea » 10年前

すいません、ひとまず現状を

コード:

datatable testdt
datatable testdt2

//2つのデータテーブルにSQLから
//読み込ませたデータを一つにする

datatable All

All.Coulmns.Add("test")
All.Coulmns.Add("hoge")

//Allに上記のテーブルを結合した状態でデータを入れたい


ここからなんですが、
最初に記載させて頂いた、
Relationではうまくできないのと、
テーブルを何とか
上でいうAllのテーブルにJOINしたような状態作ろうと、
For文などで入れ込もうと試みたんですが、
当然Rowを基準に増やすと別レコードになってしまうため、
結合したデータテーブルが上手く作れない状態です。

まとめようとしている二つのDataTableは
エイリアスでカラム名は一致していて、
カラム数も同じで、IDという同じデータを持っています。
このIDでデータテーブルを結合できないかと考え
試行錯誤中ですが、何か良い方法があれば、ご教授して頂けると嬉しいです。

アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: C#でデータテーブル同士の結合について

#5

投稿記事 by 海Sea » 10年前

データテーブルの結合は、あきらめて
根本的なアプローチを変えたのでいったんとぴは解決としておきます。

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: C#でデータテーブル同士の結合について

#6

投稿記事 by YuO » 10年前

DataRelationは,外部キー制約をDataSetに持ち込むためのものです。

でもって,DataTableにSQLのView相当の機能はありません。
ただし,DataRelationを使って,DataRowからGetParentRowGetChildRowsによってリレーションによって結ばれたDataRowを引っ張ってくることが出来ます。
また,型指定されたデータセットにテーブルとリレーションを用意しておくと,最初から専用のメソッドやプロパティを用意してくれます。
ref) Visual Studio でのデータセットの操作

ただ,DataSetが使いやすいかというと……。
MSMVPのneueccさんとかはオワコンて言っておられます。
実際,引っ張ってきた後にModelに詰め替える作業する (まぁ,LINQでやりますが) くらいなら,POCOにDapperで詰め込んでからModelに詰め替えた方が楽ですし……。
オフトピック
私の場合,WinFormsでもViewModel (相当) を作るので,DataSetがViewまで出てくることはありえない状況です。
WinFormsでもMとV/Cは当然分離しますよね。

アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: C#でデータテーブル同士の結合について

#7

投稿記事 by 海Sea » 10年前

YuO さんが書きました:DataRelationは,外部キー制約をDataSetに持ち込むためのものです。

でもって,DataTableにSQLのView相当の機能はありません。
ただし,DataRelationを使って,DataRowからGetParentRowGetChildRowsによってリレーションによって結ばれたDataRowを引っ張ってくることが出来ます。
また,型指定されたデータセットにテーブルとリレーションを用意しておくと,最初から専用のメソッドやプロパティを用意してくれます。
ref) Visual Studio でのデータセットの操作

ただ,DataSetが使いやすいかというと……。
MSMVPのneueccさんとかはオワコンて言っておられます。
実際,引っ張ってきた後にModelに詰め替える作業する (まぁ,LINQでやりますが) くらいなら,POCOにDapperで詰め込んでからModelに詰め替えた方が楽ですし……。
オフトピック
私の場合,WinFormsでもViewModel (相当) を作るので,DataSetがViewまで出てくることはありえない状況です。
WinFormsでもMとV/Cは当然分離しますよね。

JOINVIEWを見つけたときはこれでいけると思ったんですが、
それ用に作られた自作クラスだったので、使用を断念しました・・・
ちなみに、残念ながらMとV/Cは分離されてないグダグダな状況です(苦笑)

閉鎖

“C言語何でも質問掲示板” へ戻る