如何更新/合并两个巨大的List ,并以最有效的方式基于公共匹配键,在C#中具有数百个属性

问题描述 投票:1回答:1

我有两个大型集合List<Class>,具有数百个属性。

例如原始集合List<OriginalCollection>和更新的集合List<UpdatedColleciton>

UpdatedCollection将在某些列中包含值,这些列很可能不属于OriginalCollection,并且UpdatedCollection可能具有某些KeyColumn [ID Column],可能不属于OriginalCollection,并且I正在接收OriginalCollection中设置的数千个数据,并且UpdatedColletion会在一段时间内增加记录。

我确实有一个要求,其中只有OriginalCollection的空列或空列应由匹配的UpdatedCollection值替换为ID,并且如果没有匹配的ID可用,则应从以下位置将这些记录添加到OriginalCollection中: UpdatedCollection

我尝试过AutoMapper,在其中尝试根据匹配ID用OriginalCollection更新UpdatedCollection,为此我找不到我的上述要求中的任何AutoMapper configuration

我正在寻找最有效的解决方案,该解决方案不应该影响性能,这就是为什么我没有采用典型的联合和交叉路口的方式,因为莫代尔拥有数百个资产,并且有成千上万的记录,而且我确实有很多我认为像AutoMapper这样的属性比在循环中编写逻辑以检查所有数千条记录的每一列的值更好的选择。

请提出任何更好的,性能更高的解决方案,例如AutoMapper配置或任何其他.Net内置功能来实现此方案。

我还在AutoMapper.Collection中也用https://github.com/AutoMapper/AutoMapper.Collection进行了检查,>

 cfg.CreateMap<OrderItemDTO, OrderItem>().EqualityComparison((odto, o) => odto.ID == o.ID);
 Mapping OrderDTO back to Order will compare Order items list based on if their ID's match

 Mapper.Map<List<OrderDTO>,List<Order>>(orderDtos, orders);

但是它具有以下行为并且不能按我的要求正常工作

  1. 如果ID匹配将把OrderDTO映射到Order
  2. 如果OrderDTO存在并且订单未添加到集合中[[不适用于我
  3. 如果订单存在并且OrderDTO没有从集合中删除
  4. 不适用于我
我有两个大型的集合List

,具有数百个属性。例如原始收藏列表和更新的收藏列表... ...>

c# list merge automapper large-data
1个回答
0
投票
[AutoMapper是已知的映射库,并且也具有很好的文档,但是无法找到有关AutoMapper.Collection的详细文档,我已经研究过AutoMapper.Collection,但未按我的要求提供解决方案。

所以,我需要走传统路线。

© www.soinside.com 2019 - 2024. All rights reserved.