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

c#lambda表达式,用于根据不同列表中的给定条件从列表中删除项,c#,lambda,C#,Lambda,假设我有一个IList ProductIds,我正在传递给一个非常慢的web服务。这个电话是这样的: var WebServiceResponse = client.SomeCall(ProductIds); INT列表将包含给定页面的所有产品ID 我有另一个列表,比如说IList,其中产品包含intproductid成员属性。我想调用我的web服务,但在这样做之前,我想从ProductId中删除其他列表中包含具有匹配ProductId的产品的所有项目。是否有一个班轮可以为我这样做,还是我必须

假设我有一个
IList ProductIds
,我正在传递给一个非常慢的web服务。这个电话是这样的:

var WebServiceResponse = client.SomeCall(ProductIds);
INT列表将包含给定页面的所有产品ID

我有另一个列表,比如说
IList
,其中产品包含
intproductid
成员属性。我想调用我的web服务,但在这样做之前,我想从ProductId中删除其他列表中包含具有匹配ProductId的产品的所有项目。是否有一个班轮可以为我这样做,还是我必须运行一个循环?我试过各种各样的方法,但都不管用。我对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)); 

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

可以使用Except方法代替Where子句:ProductIds.Except(otherID)
var WebServiceResponse = client.SomeCall(ProductIds.Where(i => !otherIDs.Contains(i).ToList()); 
var excluded = ListA.Where(p=>!ListB.Contains(pb=>pb.Id == p.Id));