C#Zip函数迭代两个对象列表

时间:2017-10-25 15:14:55

标签: c# list zip

我有一个程序可以从文件中创建一个对象列表,并且还会创建一个相同类型对象的列表,但是数据库中的对象属性较少,而且有一些不同的属性,如: 从文件列表:地址ID,地址,城市,州,邮编,其他重要属性 DB中的列表:地址ID,地址,城市,州

我已经在这个CustObj上实现了IEquatable,因此它只与Address,City和State进行比较,希望能够在两个列表之间进行简单的比较。

最终目标是从数据库中获取地址ID,并更新文件中对象列表中每个地址的地址ID。这两个列表可能有很多对象(超过1,000,000),所以我希望它很快。

另一种方法是将其卸载到数据库并让DB返回我们需要的信息。如果这将显着更快/更节省资源,我将走这条路线,但我想看看它是否可以在代码中快速有效地完成。

无论如何,我看到有一种Zip方法。我想知道我是否可以使用它来说"如果两个列表之间存在匹配,请将数据保留在列表1中,但将列表1中每个对象的地址id属性更新为列表中的地址Id 2"

这可能吗?

2 个答案:

答案 0 :(得分:0)

答案是,这取决于。你还没有提到很多参数。

唯一可以确定的方法是构建一个解决方案(最好使用zip方法,因为它涉及的工作量较少),如果它符合您的要求参数(时间或任何其他参数,内存占用?),你可以止步

否则您必须将其卸载到数据库。请注意,如果您想使用zip方法,则必须同时保存文件中的100万条记录和内存中的100万条记录。

将所有内容推送到数据库的问题是,插入许多记录是消耗的资源(时间,空间等)。此外,如果你想每天都这样做,那将更加困难,资源明智。

您的问题没有说明这是生产环境中的一次性事件还是日常事件。即使这样也会对选择哪种方法产生影响。

重复一遍,你必须尝试不同的方法,根据你的要求看看哪种方法最适合你:这是一次性的事吗?这个过程有多少资源?它有多少时间?可能还有更多。

答案 1 :(得分:0)

听起来有点像val df4 = df3.groupBy("pos_id", "article_id").agg(max("date"), sum("qte"), sum("ca")).join(hist2.select("pos_id", "article_id", "sale_price"), Seq("pos_id", "article_id")) 又名

的工作
.Aggregate()

通常我会使用一个空的otherListPrefilled,但不确定它是如何对100k数据项执行的。

如果它是一次性的东西,将文件放到csv可能会更快,将它作为临时表导入数据库并加入sql中的数据。