c# - 比较实体时,除了在 linq 中如何工作?

标签 c# linq entity-framework

假设我有名为 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.GetHashCodeT 提供.

因此,它是否实现了 IEquatable<T> 取决于您的类型接口(interface)或覆盖 EqualsGetHashCode方法。

关于c# - 比较实体时,除了在 linq 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028574/

相关文章:

c# - 将 Expression<Func<T1,bool>> 动态转换为 Expression<Func<T2,bool>

java - 是否可以像 C# 中的 app.config 那样在 Java 中转换 .properties 文件

c# - Linq distinct 基于两列

c#取消定义所有参数的快速方法

c# - 仅返回列表 C# 中包含的值

entity-framework - Entity Framework 'Update Model from Database'在基类和子类之间重新创建关联

mysql - ASP.NET MVC Entity FrameWork 中一个 View 中的多个模型

c# - EntityType 'Movie_Category_Map' 没有定义键。定义此 EntityType 的键

javascript - 无法删除文件,因为它正被另一个进程 ASP.NET Core MVC 使用

c# - 元组到元组的转换