【发布时间】:2022-11-04 18:57:52
【问题描述】:
我有 2 个具有相同属性的数据模型,我从 2 个 Web API 响应中获取数据。我正在尝试将 2 个模型与值进行比较,如果发现数据差异,我需要比较,如果发现分配给数据模型的新实例或现有的最新实例,则查找差异。
例如:UserProfile1 包含最新数据。
比较 2 个数据模型(不是列表)的最佳方法是什么?目前我正在使用 if-else 方法,因为我有 25 个属性用于单个数据模型。
Icomparer 可以吗?
UserProfile userProfile1 = new UserProfile()
{
Name = "Satya",
AddressLine1 = "RailwayRoad",
AddressLine2 = "MG Street",
AddressLine3 = "India"
};
UserProfile userProfile2 = new UserProfile()
{
Name = "Satya",
AddressLine1 = "RailwayRoad",
AddressLine2 = "Metro Street",
AddressLine3 = "India"
};
if(userProfile1.Equals(userProfile2))
{
// I tried like this
}
bool isUserDetailsDiff = false;
if (!string.Equals(userProfile1.Name, userProfile2.Name))
{
isUserDetailsDiff = true;
userProfile1.Name = userProfile2.Name;
}
else if (!string.Equals(userProfile1.AddressLine1, userProfile2.AddressLine2))
{
isUserDetailsDiff = true;
userProfile1.AddressLine1 = userProfile2.AddressLine2;
}
【问题讨论】:
-
Data Model是一个抽象术语,既不是容器,也不是可以与其他事物进行比较的对象。您在问如何对两者进行深度比较对象、userProfile2和userProfile1。有几个关于这个的问题。 like this one。虽然没有简单的解决方案。您要么使用反射来比较属性,要么使用IEquatable和复杂属性的递归 -
这个问题在这里得到解答:stackoverflow.com/a/10454552/8336973
-
为什么将对象称为
data models?您是否尝试将差异保存到数据库中?还是让 EF 以某种方式表现?将更改发送给客户端? -
还有
record- 会生成IEquatable<T>代码的语法糖
标签: c# .net .net-core datamodel iequalitycomparer