2011-12-21 20 views
0

EnumerableRowCollectionからdatarowを削除します。それは可能ですか?私は、私のコンテキストを理解するために汎用変数varの代わりにEnumerableRowCollectionを使用しています。EnumerableRowCollectionからDataRowを削除するには<DataRow>?

EnumerableRowCollection<DataRow> results = from myRow in myDataTable.AsEnumerable() 
              where results.Field("RowNo") == 1 
              select results; 

foreach(DataRow result in results) 
{ 
    if(resultOk(result)) 
    delete result from results?? 
} 
+0

EnumerableRowCollectionからレコードを削除しても、それがデータストアから削除されないことがわかっていると思いますか? – Scottie

答えて

3

foreachを使用して、反復処理中のコレクションから要素を削除することはできません。これは単に禁止されており、実行時例外が発生します。

あなたは、単にlinq問合せにこのロジックを移動する場合があります:あなたは、あなたが本当にしたい要素を持つリストにこれはforeachループ内でこれらの要素を削除する必要はありませんし、戻ります

EnumerableRowCollection<DataRow> results = from myRow in myDataTable.AsEnumerable() 
where myRow.Field("RowNo") == 1 && !resultOk(myRow) 
select myRow; // note that you're returning myRow, not results, like in your code 
// you need to pay attention to code samples you're providing to avoid misunderstanding 

+0

+1良い答え。 foreachループ内の要素を削除することができたとしても、EnumerableRowCollection はRemoveメソッドを提供しません... –

+0

@pako、EnumerableRowCollectionがある場合はの結果のサブセットそのサブセットを削除できますか?私が意味する場合 EnumerableRowCollection fullresults = getResults(); EnumerableRowCollection subresults = getSubResults(); EnumerableRowCollection finalResults = fullresults-subresults; どうすればいいのですか: – user1061293

+0

@djacobsonは上記のように、 'EnumerableRowCollection 'から要素を削除することはできません。ただし、linqはコレクションを照会し、このクエリから新しい結果を取得して、変数に割り当てられた以前のコレクションを上書きします。または、最初のクエリの実行中に削除する必要がある要素があれば、最初のクエリで 'where'にフィルタを追加します。 – Pako

関連する問題