[英]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.