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

本文关键字:列表 条件 删除 表达式 c#lambda | 更新日期: 2023-09-27 17:57:51

假设我有一个IList<int> ProductIds,我正在将它传递给一个非常慢的web服务。这个电话看起来是这样的:

var WebServiceResponse = client.SomeCall(ProductIds);

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

我有另一个列表,比如IList<Product>,其中Product包含int ProductId成员属性。我想调用我的web服务,但在调用之前,我想从ProductId中删除在我的另一个列表中具有匹配ProductId的产品的每个项目。有没有一个线性可以为我做到这一点,或者我必须运行一个循环?我试过各种各样的东西,但都无法编译。我还是lambda表达式的新手,所以希望这一个是蛋糕。

c#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)); 

如果您的web服务采用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只有Id,可能会有点不同,那么它只是!清单B.包含(p.Id)