【问题标题】:Intersecting lists with custom comparer returns empty set与自定义比较器相交的列表返回空集
【发布时间】:2012-11-12 11:44:10
【问题描述】:

我正在使用 intersect 与列表进行比较,如下所示: (以 POCO Car 为例)

IEnumerable<Car> updatedCars = CarsList.Intersect(dbCarsList, carsComperator);

我将carsComperator定义如下

public bool Equals(Car x, Car y)
{
    if (object.ReferenceEquals(x, y)) return true;
    if (x == null || y == null) return false;
    return (x.Id == y.Id);
}

public int GetHashCode(Car car)
{
    return car.Id.GetHashCode();  // Id is Guid
}

但是当 Intersect 命令运行时,它什么也没带来。
我假设程序没有通过我的比较器,因为我的断点处没有停止。

知道我做错了什么吗?

【问题讨论】:

  • 您显示的代码乍一看还不错,所以问题肯定出在其他地方。您能否添加一个简短但完整的程序来演示该问题?
  • 您的GetHashCode 中有错字吗?应该是car.Id.GetHashCode() 吗?
  • 我已将其充实为一个可运行的示例,并且运行良好。也许展示你正在做的与此不同的事情? pastie.org/5365261
  • 你确定你的两个输入中都有汽车吗?
  • 您是否尝试过实现您的查询var updatedCars = CarsList.Intersect(dbCarsList, carsComperator).ToList()

标签: c# linq collections


【解决方案1】:

尝试遍历结果列表。如果Intersect使用yield返回机制,则只有在迭代得到的IEnumerable时才会发起比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多