簡體   English   中英

LINQ根據另一個對象列表從一個對象列表中刪除對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM