簡體   English   中英

如何使用 linq 通過多個變量從列表中刪除對象

[英]how to remove objects from list by multiple variables using linq

我想使用 linq 從列表中刪除對象,例如:

public class Item
{
    public string number;
    public string supplier;
    public string place;
}

現在我想刪除所有出現多次的具有相同編號和供應商的項目。
謝謝

就地執行此操作會有些乏味,但如果您不介意創建新列表,則可以使用 LINQ。

指定項目相等定義的最簡單方法是投影到匿名類型的實例 - C# 編譯器代表您添加了一個合理的相等實現:

List<Item> items = ...

// If you mean remove any of the 'duplicates' arbitrarily. 
List<Item> filteredItems = items.GroupBy(item => new { item.number, item.supplier })
                                .Select(group => group.First())
                                .ToList();

// If you mean remove -all- of the items that have at least one 'duplicate'.
List<Item> filteredItems = items.GroupBy(item => new { item.number, item.supplier })
                                .Where(group => group.Count() == 1)
                                .Select(group => group.Single())
                                .ToList();

如果我的第一個猜測是正確的,您還可以考慮編寫一個IEqualityComparer<Item>然后使用Distinct運算符:

IEqualityComparer<Item> equalityComparer = new NumberAndSupplierComparer();
List<Item> filteredItems = items.Distinct(equalityComparer).ToList();

順便說一句,類型公開公共字段(使用屬性)或公共成員具有駝峰式名稱(使用pascal-case)不是常規的。 這會更慣用:

public class Item
{
    public string Number { get; set; }
    public string Supplier { get; set; }
    public string Place { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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