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

问题描述

| 假设我要传递给非常慢的Web服务的“ 0”。该调用将如下所示:
var WebServiceResponse = client.someCall(ProductIds);
整数列表将包含给定页面的所有产品ID。 我还有另一个列表,例如“ 2”,其中“产品”包含一个“ 3”成员属性。我想调用我的Web服务,但是在这样做之前,我想从其他列表中具有与匹配的ProductId匹配的Product的ProductIds中删除所有项目。是否有一个班轮可以为我做到这一点,还是我必须运行一个循环?我已经尝试过各种方法,但是没有编译。我还是lambda表达式的新手,希望这是蛋糕。     

解决方法

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)); 
如果您的网络服务专门采用List或IList,则需要在末尾添加ToList:
var WebServiceResponse = client.SomeCall(ProductIds.Where(i => !otherIDs.Contains(i).ToList()); 
    ,
var excluded = ListA.Where(p=>!ListB.Contains(pb=>pb.Id == p.Id));
如果ListB仅是Ids,可能会有所不同,那么它将只是!ListB.Contains(p.Id)