c# - C# 中的 List<T>.Distinct() - EqualityComparer 的多个条件?

标签 c# list distinct

我有一个对象集合,每个对象都有几个属性。我经常需要为该集合中的许多属性获取不同值的列表。如果我在此类型上实现 IEqualityComparer,它会为我提供一个获取集合中不同对象的单一标准。我如何才能根据此集合的多个条件调用 Distinct?

例如,

  class Product {
    string name ;
    string code ;
    string supplier ;
//etc 
}

想象一下此类产品对象的列表。 有时,我想获得列表中不同名称的列表,而在其他时间,我想获得不同供应商的列表。等等 如果我根据 IEqualityComparer 的实现方式对这些产品的列表调用 Distinct,它将始终使用相同的标准,这不会达到我的目的。

最佳答案

只需提供不同的IEqualityComparerDistinct 的不同调用的实现.注意 IEquatable 之间的区别和 IEqualityComparer - 通常一个类型不应该实现 IEqualityComparer为自己(所以 Product 不会实现 IEqualityComparer<Product> )。您会有不同的实现,例如 ProductNameComparer、ProductCodeComparer 等。

但是,另一种选择是使用 DistinctBy MoreLINQ

var distinctProducts = products.DistinctBy(p => p.name);

关于c# - C# 中的 List<T>.Distinct() - EqualityComparer 的多个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730673/

相关文章:

c# - asp.net MVC 4,标记地点 - 最佳实践(例如酒吧、商店、餐厅)

c# - 错误: A query body must end with a select clause or a group clause

c# - 编译器警告 CS1591 "Missing XML Comment"未显示,我希望它显示

python - 向 python 元组添加条目

C# 从元数据中获取视频文件持续时间

python - 匹配字典列表最有效的方法是什么?

Python 3.x 列表推导 VS 元组生成器

sql - Oracle - 来自单个列的唯一值,但返回其他列

MySQL 5.6.13 计数不同的结果不匹配

linq-to-sql - Linq 到 Sql : Select distinct rows while ignoring specified columns