C#group by消除重复

Mar*_*ark 0 c# linq group-by

我正在使用一个大的兴趣点数据集(POI),它们都有Lat/Long值.

我想过滤掉彼此非常接近的POI.我认为要实现这一点,我可以将Lat/Long向下舍入到X小数位并按结果分组(或调用Distinct()或其他)...

我写了一个LINQ语句似乎没有做我想要的,

 var l1 = (from p in PointsOfInterest where p.IsVisibleOnMap select p).Distinct(new EqualityComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)

这里EqualityComparer

public class EqualityComparer : IEqualityComparer<PointOfInterest>
{
    public bool Equals(PointOfInterest x, PointOfInterest y)
    {
        return Math.Round(x.Latitude.Value, 4) == Math.Round(y.Latitude.Value, 4) && 
            Math.Round(x.Longitude.Value, 4) == Math.Round(y.Latitude.Value, 4);
    }

    public int GetHashCode(PointOfInterest obj)
    {
        return obj.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

但Equals方法似乎永远不会被称为?!?

有关最佳方法的任何想法吗?

Bal*_*a R 5

Equals()永远不会被调用,GetHashCode()因为你GetHashCode()System.Object类中定义了,因为为任何两个对象返回不同的值.您需要以不同的方式实现GetHashCode().

尝试类似的东西

public int GetHashCode(PointOfInterest obj)
{
    return obj.Longitude.Value.GetHashCode() ^ obj.Latitude.Value.GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)