- ふらっと C#,C♯,C#(初心者用) Part119 [無断転載禁止]©2ch.net
331 :デフォルトの名無しさん[sage]:2016/02/13(土) 10:33:00.45 ID:gWYi+rc9 - DataTableで行削除について質問です
1万件くらいあるテーブルをDataTableに読み込んで処理していて 指定のカラムに入ってる特定の区分(値)のデータのみ削除したいのですが、 Linqで絞り込んだコレクションをforeachで回して dt.Rows.Remove(row)とすると、回す毎にコレクション自体が変わってしまってエラーとなるし かといってforで全件回すのもなんかスマートでないというか for (int i = 0; i < dt.Rows.Count; i++) { if(dt.Rows[i].RowState != DataRowState.Deleted && (int)dt.Rows[i]["hoge"] == hoge { dt.Rows[i].Delete(); } } 他に方法はございますでしょうか
| - ふらっと C#,C♯,C#(初心者用) Part119 [無断転載禁止]©2ch.net
334 :デフォルトの名無しさん[sage]:2016/02/13(土) 11:21:16.59 ID:gWYi+rc9 - レスどうもです
もう少し具体的に言うと、データベース上に月別のデータがまとめた1つのテーブルにあって、 指定月のデータだけをごっそり入れ替えたい(カラムには月表示があるのでそれで絞ってます)のです 月毎にテーブル分けて、指定月のテーブルだけ全件削除、新規のデータを挿入が手っ取り早いのですが、 年間のテーブル1つでやりたいと思ってるのですが >>333 CopyToDataTableも最初は考えたのですが、データベースから引っ張ってきてるので DataTable作り直すと結局戻すときに全部入れ直さないといけないのかなと思うのですがどうなんでしょう >>332 データベースから読み込む時点でテーブルわけといた方がよいのですかね
| - ふらっと C#,C♯,C#(初心者用) Part119 [無断転載禁止]©2ch.net
339 :デフォルトの名無しさん[sage]:2016/02/13(土) 14:53:28.98 ID:gWYi+rc9 - 多くのレスに感謝です
データ内容をUPDATEというより、その都度の処理結果なので全く別の結果として保存したいんですよね なので一回削除したかったんです 結論から言うと、>>338さんのとおり、月別に格納したDataRowのコレクションをToListして、 FoEachで元のデータテーブルから該当DataRowを削除することでいけました コードも1行ですみました ただ、Remove使うとDataTableのUpdateで処理されなかったのでDeleteで削除フラグにたてて 最後にUpdateで削除されるようにしたらうまくいきました Result.ToList().ForEach(row => row.Delete()); ※ResultはLINQで月別に抽出したDataRowのコレクション
|
|