LINQ to Objects.Distinct()不拉取不同的对象

LINQ to Objects.Distinct()不拉取不同的对象,linq,union,distinct,Linq,Union,Distinct,我有两种方法可以对客户进行模糊搜索。一个是缩写名,另一个是客户全名。当我获取这两个结果集,然后将它们合并在一起(我已经读了好几个地方,应该会删除不同的值),我得到了重复的结果集。考虑到我需要做的就是调用.Distinct()方法,我仍然会得到重复的。我是否需要在我的客户对象中实现一些比较功能? 我的代码: Union将删除重复项。如果需要应用引用相等以外的条件,请将IEqualityComparer传递到Union您需要创建相等比较器,并在Union或Distinct中使用它: Public C

我有两种方法可以对客户进行模糊搜索。一个是缩写名,另一个是客户全名。当我获取这两个结果集,然后将它们合并在一起(我已经读了好几个地方,应该会删除不同的值),我得到了重复的结果集。考虑到我需要做的就是调用
.Distinct()
方法,我仍然会得到重复的。我是否需要在我的客户对象中实现一些比较功能? 我的代码:


Union
将删除重复项。如果需要应用引用相等以外的条件,请将
IEqualityComparer
传递到
Union
您需要创建相等比较器,并在
Union
Distinct
中使用它:

Public Class MyComparer
    Implements IEqualityComparer(Of ICustomer)

    Public Overloads Function Equals(ByVal x As ICustomer, ByVal y As ICustomer) _
        As Boolean Implements _
        System.Collections.Generic.IEqualityComparer(Of ICustomer).Equals
        Return ((x.id = y.id) AndAlso (x.title = y.title))
    End Function
    Public Overloads Function GetHashCode(ByVal obj As ICustomer) _
        As Integer Implements _
        System.Collections.Generic.IEqualityComparer(Of ICustomer).GetHashCode
        Return Me.GetHashCode()
    End Function
End Class
用法示例:

Dim allMatch = shortNameMatch.Union(custNameMatch).Distinct(New MyComparer())
Dim allMatch = shortNameMatch.Union(custNameMatch, New MyComparer())

这让人震惊。我想我可能需要这样的东西,但在任何地方都找不到。或者使用Morelink's DistinctBy:
Dim allMatch = shortNameMatch.Union(custNameMatch).Distinct(New MyComparer())
Dim allMatch = shortNameMatch.Union(custNameMatch, New MyComparer())