c# - 如何找到 2 个列表模型之间的差异
问题描述
面临比较 2 个模型列表的问题。
public class Relations
{
[key]
public int Id { get; set; }
public int CounterpartyId { get; set; }
public int CounterpartyTypeId { get; set; }
public int DebTypeId { get; set; }
}
我有方法从前端获取此模型的列表并从数据库中获取列表。当来自前端的模型没有 id 时,我没有将 id 添加到这个模型中。例如:
var models = new List<Relations>()
{
new Relations
{
CounterpartyId = 1,
CounterpartyTypeId = 1,
DebTypeId = 1
},
new Relations
{
CounterpartyId = 1,
CounterpartyTypeId = 2,
DebTypeId = 1001
}
};
var entity = new List<Relations>()
{
new Relations
{
CounterpartyId = 1,
CounterpartyTypeId = 1,
DebTypeId = 1
},
};
如何比较这两个模型列表???我需要插入模型(CounterpartyId = 1,CounterpartyTypeId = 2,DebTypeId = 1001)
为了避免数据库中的重复,我尝试
IEnumerable<Relations> toInsert = models.Except<Relations>(entity);
并尝试
var test=(from m in models select m).Except(entity).ToList();
但它们是相同的,无法找到不在数据库中的数据
解决方案
正如彼得史密斯在评论部分建议的那样,您可以创建您的Comparer
:
sealed class MyComparer : IEqualityComparer<Relations>
{
public bool Equals(Relations x, Relations y)
{
if (x == null)
return y == null;
else if (y == null)
return false;
else
return x.CounterpartyId == y.CounterpartyId && x.CounterpartyTypeId == y.CounterpartyTypeId && x.DebTypeId == y.DebTypeId ;
}
public int GetHashCode(Relations obj)
{
return obj.Id.GetHashCode();
}
}
Except()
并按如下方式使用重载:
IEnumerable<Relations> toInsert = models.Except<Relations>(entity, new MyComparer());
推荐阅读
- django-rest-framework - Django Rest Framework AttributeError:模块'coreapi'没有属性'Client'
- excel - 使用赛普拉斯使用 SheetJS 编辑/修改 excel 文件
- javascript - 如何在另一个数组中每隔一个元素插入每个数组元素?
- next.js - Next 加载 SWC 二进制文件失败
- flutter - 视频结束时,Youtube 应用程序未关闭 Amazon firetv
- json - JSON嵌套数组/对象到SOAP XML正文-我在将以下JSON请求转换为Dataweave中的soap请求时遇到了困难
- swift - 如何在 SwiftUI 中增加网格中的填充?
- javascript - Spotify API 只获得了一些设备,但我的手机获得了所有设备
- python-3.x - VS 代码中的 Python
- reactjs - 在 ASP.NET Core 应用程序中配置 React Dev Server