[英]Remove items from a List that are in another List by specific property with grouping
[英]Remove items from a List which are in another List by a specific property?
我有两个清单:
带有CancelledFlights的ListA
ListB包含所有航班
我想从ListB删除所有已取消的航班,所有航班都不是通过对象而是通过属性FlightNumber进行比较 。 我怎么能用Lambda或LINQ实现这个目标? 我知道如何在LINQ和lambda中选择但不知道如何删除...
你可以使用linq来做到这一点
var cancelledFlightNumbers = ListA
.Select(x => x.FlightNumber)
.ToList();
var cancelledFlightsRemoved = ListB
.Where(x => !cancelledFlightNumbers.Contains(x.FlightNumber))
.ToList();
如果您有太多项目,那么您可以使用HashSet
来提高性能
var cancelledFlightNumbers = new HashSet<int>(ListA.Select(x => x.FlightNumber));
我有两种方法可以做到这一点,一种是LINQ,另一种是List<T>
的方法:
List<T>
方法:
allFlights.RemoveAll(flight => cancelledFlight.Any(cancelled => cancelled.FlightNumber == flight.FlightNumber);
LINQ方法:
// an IEqualityComparer<T> that can compare objects by FlightNumber. var flightNumberComparer = new FlightNumberComparer(); allFlights = allFlights.Except(cancelledFlights, flightNumberComparer).ToList();
如您所见,对于这个简单的场景, RemoveAll
可能是最简单的。 它会删除原始列表中的原位项而不是创建新列表,并且可能最容易编写。
请记住,LINQ是一种查询语言。 它不是为了删除操作而设计的。 最多,它可以创建一个集合的过滤视图,并根据它创建一个新列表(就像我们在这里所做的那样)。 但LINQ本身不会帮助您从列表中删除项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.