トップページ > プログラム > 2016年02月13日 > gWYi+rc9

書き込み順位&時間帯一覧

21 位/208 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000110010000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ふらっと C#,C♯,C#(初心者用) Part119 [無断転載禁止]©2ch.net

書き込みレス一覧

ふらっと 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のコレクション


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。