【发布时间】:2017-02-03 14:11:49
【问题描述】:
我编写了一个基本上比较两个列表的代码,并检查它们名为 TransactionID 的属性,如果 TransactionID 不存在于旧列表中,它将被添加到仅包含旧项目的新列表中。
所以列表是:
// list named: prepared - contains all old and new items
// UserTransactions from DB - list - contains only old transactions
现在我比较这两个列表,看看准备的列表是否有一些项目不存在于 db 的 usertransaction 列表中,如下所示:
var ListDoAdd = prepared.Where((i) => ctx.EbayUserTransactions.Where(x => x.SearchedUserID == updatedUser.SearchedUserID).ToList().FindIndex((el) => el.TransactionID == i.TransactionID) == -1).ToList();
现在 ListDoAdd 最终包含了 DB 中缺少的所有项目。
当我处理大量记录时,这种方式效率非常低。
我认为我可以做的是首先将特定用户的所有事务加载到内存中,如下所示:
var oldList = ctx.UserTransactions.Where(x => x.SearchedUserID == updatedUser.SearchedUserID).ToList()
然后在运行时比较这两个列表以加快速度,而不是逐个检查每个项目,我上面显示的这个方法现在没有?
So now I have:
prepared list
and
oldList
现在我只需要找出最快的方法来比较两个列表并找到丢失的项目...
有人可以帮我解决这个问题吗?
附:伙计们,如果我要做多线程,那么唯一可能的方法就是使用 PLINQ,不是吗?
【问题讨论】:
-
有人吗???
-
我希望我没有遗漏什么,但听起来您只需要遍历可能有新项目的列表并检查该项目是否在另一个列表中。如果没有,则添加它。单次通过此列表即可完成此操作。
-
@JohnG 是的,就是这样,我只想写尽可能快的方法,以便在列表更大时减少等待时间,比如比较两个列表中的 10-15k 个项目......这会耗费大量时间
标签: c# list c#-4.0 parallel-processing compare