gpt4 book ai didi

c# - 如何使用linq通过多个变量从列表中删除对象

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:31 26 4
gpt4 key购买 nike

我想使用 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 运算符(operator):

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

顺便说一句,类型公开公共(public)字段(使用属性)或公共(public)成员使用驼峰命名法(使用 pascal-case)是不常见的。这会更地道:

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

关于c# - 如何使用linq通过多个变量从列表中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6748694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com