2011-05-26 9 views
4

非常に遅いWebサービスに渡している​​があります。この呼び出しは、次のようになります。c#lambda式を使用して、リスト内の指定された条件に基づいてリストから項目を削除します。

intのリストには、特定のページのすべての製品IDが含まれます。

商品にint ProductIdメンバープロパティが含まれている別のリスト、たとえば​​があります。私は自分のWebサービスに電話をかけたいが、そうする前に、ProductIdが一致する他のリストのProductを持つProductIdsからすべての項目を削除したい。私のためにこれを行うことができる1つのライナーがありますか、またはループを実行する必要がありますか?私はあらゆる種類のものを試しましたが、何もコンパイルしません。私はラムダ式にまだ新しいので、うまくいけばこれはケーキです。

答えて

4
var list = new List<Product>(); //or wherever you get it from 
var otherIDs = list.Select(p => p.ProductId); 
var WebServiceResponse = client.SomeCall(ProductIds.Where(i => !otherIDs.Contains(i)); 

Webサービスは、特にリストまたはIListのを取る場合は、あなたが最後にToListメソッドを追加する必要があります:ListBのが唯一である場合

var WebServiceResponse = client.SomeCall(ProductIds.Where(i => !otherIDs.Contains(i).ToList()); 
+5

Where句の代わりに使用できるExceptメソッドがあります。ProductIds.Except(otherIDs) –

0
var excluded = ListA.Where(p=>!ListB.Contains(pb=>pb.Id == p.Id)); 

は少し異なる可能性がありますListB.Contains(p.Id)

関連する問題