我在读一本关于 Linq 的书,看到 Distinct 方法有一个需要比较器的重载。这将是一个很好的解决方案,我想从集合中获取不同的实体,但希望在实体 ID 上进行比较,即使其他属性不同。
根据这本书,如果我有一个 Gribulator 实体,我应该能够创建一个像这样的比较器......
private class GribulatorComparer : IComparer<Gribulator> {
public int Compare(Gribulator g1, Gribulator g2) {
return g1.ID.CompareTo(g2.ID);
}
}
...然后像这样使用它...
List<Gribulator> distinctGribulators
= myGribulators.Distinct(new GribulatorComparer()).ToList();
但是,这会产生以下编译器错误...
“System.Collections.Generic.List”不包含“Distinct”的定义和最佳扩展方法重载“System.Linq.Enumerable.Distinct(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEqualityComparer)”有一些无效的论点
参数 2:无法从 'LinqPlayground.Program.GribulatorComparer' 转换为 'System.Collections.Generic.IEqualityComparer'
我搜索了一下,看到了很多使用这样的代码的例子,但没有关于编译器错误的抱怨。
我究竟做错了什么?另外,这是最好的方法吗?我想要一个一次性的解决方案,所以不想开始更改实体本身的代码。我希望实体保持正常,但就在这个地方,仅按 ID 进行比较。
谢谢你的帮助。