2012-02-23 15 views
2

私は、1つのテーブルとその中のいくつかのレコードを持つデータセット(以下のデータセットと呼ぶ)を持っています。列の1つはメッセージと呼ばれ、エラーメッセージが含まれています。このフィールドに値があるレコードがあれば、それをエラーデータセット(下記のerrorDataSet)にコピーして元のデータセットから削除します。私は、LINQでこれまでのところ得ることができた:LINQでデータセットからレコードを削除する方法

 DataSet errorDataSet = dataSet.Copy(); 

     //find all records that have a Message column value 
     var query = from row in errorDataSet.Tables[0].AsEnumerable() 
        where !String.IsNullOrEmpty(row.Field<string>("Message")) 
        select row; 

     DataSet tempErrorDataSet = errorDataSet.Clone(); 
     foreach (var row in query) 
     { 
      tempErrorDataSet.Tables[0].Clear(); 
      tempErrorDataSet.Tables[0].ImportRow(row); 
      utility.WriteError(connectorName, row["Message"].ToString(), tempErrorDataSet); 

      //remove the error row from the good data 
      dataSet.Tables[0].Rows.Remove(row); 
     } 

一番下の行は、例外をスローしたり、私はLINQでこれを行うための簡単な方法があると確信して収集などを変更することに関するエラーが発生します。

注:私はtempErrorDataSetを持っているので、XMLに変換してストアドプロシージャに渡すだけです。一度にそのフォーマットのレコードしか取らないので、毎回クリアします。

+0

エラー、例外などは何ですか? – gideon

+0

コレクションからアイテムを削除する例外はありますが、LINQを使用してこのコードを完全に書き直したいのですが、私の質問によると(例外ではありません) – Rodney

答えて

3

クエリは、(間接的に)テーブルの行を列挙しています。既に知っているはずですが、コレクションを列挙してコレクションを変更することはできません(この場合は何かを削除してください)。あらかじめリストに内容を投げてください。そうすれば、実際のテーブルで列挙されるのではなく、いくつかの行のコピーが列挙されます。

var query = (from row in errorDataSet.Tables[0].AsEnumerable() 
      where !String.IsNullOrEmpty(row.Field<string>("Message")) 
      select row).ToList(); 
+0

ps、私は一時テーブルをクリアしたいと思っていますその中で。 –

関連する問題