C# LINQ-Distinct被忽略了吗?
因此,我的LINQ代码有一个问题,我必须选择一个不同的数据集,我实现了以下C# LINQ-Distinct被忽略了吗?,c#,.net,linq,distinct,gethashcode,C#,.net,Linq,Distinct,Gethashcode,因此,我的LINQ代码有一个问题,我必须选择一个不同的数据集,我实现了以下IEqualityComparer: public class ProjectRoleComparer : IEqualityComparer<ProjectUserRoleMap> { public bool Equals(ProjectUserRoleMap x, ProjectUserRoleMap y) { return x.RoleID.Equals(y.RoleID)
IEqualityComparer
:
public class ProjectRoleComparer : IEqualityComparer<ProjectUserRoleMap>
{
public bool Equals(ProjectUserRoleMap x, ProjectUserRoleMap y)
{
return x.RoleID.Equals(y.RoleID);
}
public int GetHashCode(ProjectUserRoleMap obj)
{
return obj.GetHashCode();
}
}
这段代码给了我6个条目,而我想要的条目数只有4个我使用LINQ是否有问题?
作为参考,
ProjectUserRoleMap
对象有一个RoleID,(int)您对GetHashCode
的实现是错误的。Returnobj.RoleID.GetHashCode()代码>
背景:
使用IEqualityComparer
的代码通常首先比较两个对象的哈希代码。只有当这些散列码相同时,才会调用等于。
它是这样实现的,因为两个不相等的对象可以具有相同的哈希键,但两个相等的对象永远不能具有不同的哈希键-如果GetHashCode()
实现正确。
这些知识用于提高比较的效率和性能,因为GetHashCode
的实现被认为是快速、廉价的操作 试试看:
public int GetHashCode(ProjectUserRoleMap obj)
{
return obj.RoleID.GetHashCode();
}
哇!太简单了!我怎么会错过呢?工作完美,正如现在所预期的那样。谢谢!
public int GetHashCode(ProjectUserRoleMap obj)
{
return obj.RoleID.GetHashCode();
}