c#lambda表达式根据不同列表中的给定条件从列表中删除项目

时间:2011-05-26 21:14:51

标签: c# lambda

说我有一个IList<int> ProductIds,我传递给一个非常慢的网络服务。那个电话会是这样的:

var WebServiceResponse = client.SomeCall(ProductIds);

整体列表将包含给定页面的所有产品ID。

我有另一个列表,例如IList<Product>,其中Product包含int ProductId成员属性。我想调用我的Web服务,但在此之前,我想删除ProductIds中的每个项目,其中包含具有匹配ProductId的其他列表中的Product。是否有一个衬垫可以为我做这个或我必须运行循环?我尝试了各种各样的东西,但没有编译。我还是lambda表达的新手,所以希望这个是蛋糕。

2 个答案:

答案 0 :(得分: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()); 

答案 1 :(得分:0)

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

如果ListB只是Ids,可能会有点不同,那么它就是它!ListB.Contains(p.Id)