为什么不.Except()和Intersect()在这里使用LINQ工作?

leo*_*ora 2 c# linq collections

我有以下代码似乎没有工作:

上下文: 我有两个对象列表:
*listOne有100条记录
*listTwo有70条记录

其中许多具有相同的Id属性(在两个列表中);

 var listOneOnlyItems = listOne.Except(listTwo, new ItemComparer ());
Run Code Online (Sandbox Code Playgroud)

这是比较器

public class ItemComparer : IEqualityComparer<Item>
{
    public bool Equals(Item x, Item y)
    {
        if (x.Id == y.Id)
            return true;

        return false;
    }

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

在我运行此代码并查看结果之后

listOneOnlyItems 
Run Code Online (Sandbox Code Playgroud)

仍然有100条记录(应该只有30条记录).谁能帮我?

也跑,跑

    IEnumerable<Item> sharedItems = listOne.Intersect(listTwo, new ItemComparer());
Run Code Online (Sandbox Code Playgroud)

在sharedItems集合中返回零reesults

Pet*_*erL 6

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

至少值得检查 - IIRC GetHashCode()在相等之前首先进行测试,如果它们没有相同的散列,则不会费心检查相等性.我不确定会发生什么obj.GetHashCode()- 这取决于你在Item课堂上实施的内容.