ページ 1 / 1
C#でデータテーブル同士の結合について
Posted: 2014年9月19日(金) 13:28
by 海Sea
いつもありがとうございます
また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同士を結合する方法があれば、
ご教授頂けると幸いです。
Re: C#でデータテーブル同士の結合について
Posted: 2014年9月19日(金) 16:48
by ookami
testtd2 == Tables["A"] でしょうか?
親と子が逆になっているとか、その辺だと思いますが...
Re: C#でデータテーブル同士の結合について
Posted: 2014年9月19日(金) 17:14
by 海Sea
ookami さんが書きました:testtd2 == Tables["A"] でしょうか?
親と子が逆になっているとか、その辺だと思いますが...
ありがとうございます。
Tables["A"]は、Relationで指定したものしか駄目なんですね。
動作を誤認してました。
ということは、これだと結合したものを新しいDataTableとして扱うことができないのでしょうか・・・
なんだかRalationしたものに対して、かなり誤解しているかもしれませんね・・・
Re: C#でデータテーブル同士の結合について
Posted: 2014年9月20日(土) 12:03
by 海Sea
すいません、ひとまず現状を
コード:
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でデータテーブルを結合できないかと考え
試行錯誤中ですが、何か良い方法があれば、ご教授して頂けると嬉しいです。
Re: C#でデータテーブル同士の結合について
Posted: 2014年9月20日(土) 14:52
by 海Sea
データテーブルの結合は、あきらめて
根本的なアプローチを変えたのでいったんとぴは解決としておきます。
Re: C#でデータテーブル同士の結合について
Posted: 2014年9月21日(日) 01:23
by YuO
DataRelationは,外部キー制約を
DataSetに持ち込むためのものです。
でもって,
DataTableにSQLのView相当の機能はありません。
ただし,DataRelationを使って,
DataRowから
GetParentRowや
GetChildRowsによってリレーションによって結ばれたDataRowを引っ張ってくることが出来ます。
また,
型指定されたデータセットにテーブルとリレーションを用意しておくと,最初から専用のメソッドやプロパティを用意してくれます。
ref)
Visual Studio でのデータセットの操作
ただ,DataSetが使いやすいかというと……。
MSMVPの
neueccさんとかは
オワコンて言っておられます。
実際,引っ張ってきた後にModelに詰め替える作業する (まぁ,LINQでやりますが) くらいなら,POCOに
Dapperで詰め込んでからModelに詰め替えた方が楽ですし……。
オフトピック
私の場合,WinFormsでもViewModel (相当) を作るので,DataSetがViewまで出てくることはありえない状況です。
WinFormsでもMとV/Cは当然分離しますよね。
Re: C#でデータテーブル同士の結合について
Posted: 2014年9月21日(日) 21:49
by 海Sea
JOINVIEWを見つけたときはこれでいけると思ったんですが、
それ用に作られた自作クラスだったので、使用を断念しました・・・
ちなみに、残念ながらMとV/Cは分離されてないグダグダな状況です(苦笑)