2010-11-22 5 views
1

LINQ結果があり、Listがあります。 LINQでWhere()を実行し、リストから一致するすべての文字列を削除したいとします。LINQ結果から削除する方法、配列から要素を一致させる

私はエラーを取得:私は何ができるオペレータ

が含まれています以外 ローカルシーケンスは、クエリ演算子のSQL実装にLINQで使用することはできませんか?

+2

がフルを投稿してください、あなたが任意の一時的なデータ構造を必要としないので、List.RemoveAll方法を使用することですコードサンプル。 –

答えて

3

あなたはすべての結果をクライアントにダウンロードし、ローカルWhereを実行するためにLINQツーSQLを強制的にあなたのWhere呼び出しの前にAsEnumerable()またはToList()を呼び出す必要があります。アイテムの

(あなたWhere呼び出しがサーバー上で実行することはできませんので、あなたがクライアント上でそれを行う必要があります)

+0

AsEnumerableは常にマテリアライゼーションを強制しますか? –

+0

@Rob:どうしたらいいですか? – SLaks

+0

これは効果的なキャストだからです:http://msdn.microsoft.com/en-us/library/bb335435.aspx "AsEnumerable (IEnumerable )メソッドは、コンパイル時の型を変更する以外の効果はありませんIEnumerable をIEnumerable 自体に実装するタイプのソースからのものです。 –

2

あなたは(たToArrayよりも高速であるToListメソッド、との)コピーを作成する必要があります」削除RE:

var removeMe = list.Where(...).ToList(); 

今removeMeはを反復処理する安全であるウィルは、しかし、より良いアプローチは

+0

ToList()は高速になります。 – SLaks

+0

@SLaks –

+0

あなたのセットが正確に2^N個のアイテムを持っていない限り、 'ToArray'は配列が正確に正しいサイズでなければならないので、終了後に小さな配列にコピーする必要があります。リストは最後に余分なスペースを持つことができるので、 'ToList'はより少ないコピーを含みます。 – SLaks