假设我有名为 X 的实体模型及其名为 Y 的列表 = X 类型的列表。
如果我有另一个相同类型的列表,称为 Z = X 类型的列表。
每个 X 都是一个实体,其主键名为 Id。
如果我更改了 Z 中的一些值并执行了下一个:
var w = y.Except(z);
(当然 z 只有 x 列表中的一些项目)。
Except的默认比较器是否使用主键来获取找到的项目 在 X 中而不是在 Z 中,还是要比较整个属性值?
最佳答案
由于您正在处理 List,因此 Except 在内存中执行并使用 Except可枚举的方法。
可枚举使用 DefaultComparer然后检查类型是否为 T
实现 System.IEquatable<T>
接口(interface),如果是,则返回 EqualityComparer<T>
使用该实现的。否则,它返回 EqualityComparer<T>
。使用 Object.Equals
的覆盖和 Object.GetHashCode
由 T
提供.
因此,它是否实现了 IEquatable<T>
取决于您的类型接口(interface)或覆盖 Equals
和 GetHashCode
方法。
关于c# - 比较实体时,除了在 linq 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028574/