[英]LINQ to remove objects from a list of objects based on another list of objects
public class Car
{
private string _manufacturer = string.empty;
private string _color = string.empty;
private string _modelLine= string.empty;
public string Manufacturer
{
get { return _manufacturer; }
set { _manufacturer= value; }
}
public string Color
{
get { return _color; }
set { _color= value; }
}
public string ModelLine
{
get { return _modelLine; }
set { _modelLine= value; }
}
}
我有一个List allCars,我想从列表中删除第二个List selectedCars列表中的所有项目。 如何使用LINQ完成此操作?
我尝试了类似的方法:
List<Car> listResults = allCars.Except(selectedCars).ToList();
但是,它不会从allCars列表中删除任何项目。
LINQ代表语言集成查询。 它用于查询 。 从列表中删除项目不会查询。 获取要删除的所有项目是一个查询,或者获取不应该删除的所有项目是另一个查询(即您拥有的查询)。
要从列表中删除您不应该使用LINQ的项目,您应该使用它提供的用于自身变异的适当的List
工具,例如RemoveAll
:
var itemsToRemove = new HashSet<Car>(selectedCars); //use a set that can be efficiently searched
allCars.RemoveAll(car => itemsToRemove.Contains(car));
样本解决方案代码
var item = new Car { Color = "red", Manufacturer = "bmw", ModelLine = "3" };
var car = new Car { Color = "red", Manufacturer = "toyo", ModelLine = "2" };
var item1 = new Car { Color = "red", Manufacturer = "marc", ModelLine = "23" };
var carsa = new List<Car>
{
item1,
item,
car
};
var carsb = new List<Car>
{
item,
car
};
carsa.RemoveAll(carsb.Contains);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.