通过特定属性从列表中删除另一个列表中的项目?

STO*_*ORM 1 .net c# linq lambda

我有两个清单:

ListA with CancelledFlights
ListB with all Flights

我想从 ListB 中删除所有 CancelledFlights,而不是通过对象而是通过属性 FlightNumber 比较所有航班。我如何使用 Lambda 或 LINQ 实现这一目标?我知道如何在 LINQ 和 lambda 中进行选择,但不知道如何删除 ...

Ham*_*jam 5

你可以使用 linq 来做到这一点

var cancelledFlightNumbers = ListA
    .Select(x => x.FlightNumber)
    .ToList();

var cancelledFlightsRemoved = ListB
    .Where(x => !cancelledFlightNumbers.Contains(x.FlightNumber))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

如果你有太多的项目,那么你可以HashSet用来提高性能

var cancelledFlightNumbers = new HashSet<int>(ListA.Select(x => x.FlightNumber));
Run Code Online (Sandbox Code Playgroud)