c# - 为什么这个 LINQ 查询没有按预期工作?

标签 c# linq

假设我有一个名为 MyClass 的类,它有两个属性(int Id 和一个字符串 Name)。我想从另一个集合中填充这些 MyClass 对象的列表,但我只想要唯一的。这个另一个集合是一个第 3 方对象,它有一个名为“Properties”的属性,它只是一个值数组,其中前两个对应于我关心的 Id 和 Name 值。此集合中可能有重复项,因此我只想要唯一的。

看起来这应该可以解决问题,但事实并非如此,它会返回所有项目,而不管重复项。我在这里做错了什么?

List<MyClass> items = (from MyClass mc in collectionOfProps 
select new MyClass() { 
Id = collectionOfProps.Properties[0], 
Name = collectionOfProps.Properties[1] }).Distinct().ToList();

最佳答案

问题很可能是MyClass没有实现 IEquatable<MyClass> 以及覆盖 EqualsGetHashCode .

为了制作Distinct()按照你想要的方式工作,你必须实现 IEquatable<T> .否则,它使用默认值(引用相等性)进行检查,这意味着它只会确定元素是否不同,如果它们是完全相同的实例。

关于c# - 为什么这个 LINQ 查询没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126160/

相关文章:

c# - 使用 C# 和 XAML 在 Metro 应用程序中自定义底部应用程序栏

c# - 如何在 LINQ 中执行嵌套的加入、添加和分组?

c# - 如何将 FirstOrDefault 与 Include 一起使用?

c# - 对一个集合进行分组并返回一个字典

c# - 为数字符号编写正则表达式

c# - 如何在 .NET Core 3.0 Entity Framework 中执行组加入?

c# - c# 中确定程序员是通过 IDE 还是用户运行程序的最佳方法是什么?

c# - 使用 Linq 按小时分组并获取每小时平均值

c# - 比较两个通用列表

c# - 字符串解析与匹配算法