使用 LINQ 和 lambda 方法在 .net 3.5 中按 (x,y) 坐标对项目进行分组?

Using LINQ with lambda method to group items by (x,y) coordinates in .net 3.5?

我想使用 .net LINQ GroupBy 方法按 x 和 y 坐标对数据点进行分组。我不确定如何将这些 x 和 y 坐标组合成一个实体以进行分组。

首先,我尝试将它们组合成一个包含两个元素的数组。我相信这没有用,因为即使它们包含相同的两个数字,两个数组也不是同一个数组。

其次,我尝试将它们转换为字符串并像这样连接它们:groupedData = data.GroupBy(a => a.x.ToString() + "," + a.y.ToString());这似乎可行,但显然效率低下,因为字符串转换应该是不必要的。

什么是完成我想要完成的事情的更好方法,最好不使用匿名类型?

注意:我必须使用 .net 3.5 执行此操作。

编辑: 这个问题确实与它被标记为重复的问题几乎完全相同。然而,最初的问题并没有问如何在不使用匿名类型的情况下做到这一点,也没有它必须在 .net 3.5 中工作的约束。

您可以通过以下方式在一个组中指定多个字段:

var query = data.GroupBy(a=> new { X = a.x, Y = a.y)};

不需要基于字符串连接进行分组。

如果我使用 .net 4.0 或更高版本,我可以使用通用 Tuple class 来表示一对数字。 MSDN 清楚地表明 (https://msdn.microsoft.com/en-us/library/dd270346%28v=vs.110%29.aspx) Tuple 实现了一个比较值的相等比较器,而不是简单的引用比较,因此应该可以工作。

在 .net 3.5 中,看起来确实没有不求助于匿名类型的通用方法。我只是承诺更改我的代码设计,以使匿名类型不会造成问题。

否则,看起来有必要使用 .net 框架中的某种类型,例如 System.Drawing.PointSystem.Drawing.PointF,或者专门为此创建一个 class。