You should use the overload of Distinct that takes an IEqualityComparer. I answered a similar question about Except on CodeProject a while back where I included a DelegateEqualityComparer class that lets you just use a lambda or other function without needing to actually write the class implementing the comparer.
http://www.codeproject.com/Messages/3244828/Re-How-do-I-do-an-effective-Except.aspx
The advice about needing equivalent hash codes probably applies as much to Distinct as it does to Except.
To use this with anonymous types, you will probably need a helper method to create the comparer. Something like this should work if you pass in the query (before calling Distinct, of course) as the first parameter to make the type inference work.
Public Function CreateComparer(Of T)(
ByVal items As IEnumerable(Of T),
ByVal comparison As Func(Of T, T, Boolean)
) As DelegateEqualityComparer(Of T)
Return New DelegateEqualityComparer(Of T)(comparison)
End Function