2011-05-26 95 views
4

說我有一個​​,我正在傳遞給一個非常慢的Web服務。該呼叫將如下所示:c#lambda表達式根據不同列表中的給定條件從列表中刪除項目

var WebServiceResponse = client.SomeCall(ProductIds); 

整數列表將包含給定頁面的所有產品ID。

我有另一個列表,說​​其中產品包含int ProductId成員屬性。我想調用我的Web服務,但在此之前,我想從ProductIds中刪除每個具有匹配的ProductId的列表中的產品。有沒有一個班輪可以爲我做這個或我必須運行一個循環?我嘗試了各種各樣的東西,但沒有編譯。我對lambda表達式仍然很陌生,所以希望這個是蛋糕。

回答

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服務採用一個List或IList的具體情況,你就需要在末尾添加一個ToList:

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

有一個Except方法可以用來代替Where子句:ProductIds.Except(otherIDs) – 2011-05-26 21:24:19

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

可能是一個有點不同,如果數組listB只Ids,那麼它就會是!ListB.Contains(p.Id)