这个问题可能有10个重复,但我想知道是否有比目前更好的方法。这是我用来说明我如何确定差异的一个小例子:
//let t1 be a representation of the ID s in the database.
List<int> t1 = new List<int>() { 5, 6, 7, 8 };
//let t2 be the list of ID s that are in memory.
//these changes need to be reflected to the database.
List<int> t2 = new List<int>() { 6, 8, 9, 10 };
var hash = new HashSet<int>(t1);
var hash2 = new HashSet<int>(t2);
//determines which ID s need to be removed from the database
hash.ExceptWith(t2);
//determines which ID s need to be added to the database.
hash2.ExceptWith(t1);
//remove contents of hash from database
//add contents of hash2 to database
我要知道,我是否可以确定在一项行动中应该增加和删除什么,而不是目前我必须做的两种行动。 有没有办法提高这项行动的业绩?在数据库的实际状况中,有几十万个身份证。
<强度 > EDIT 强度 > 或第二个问题,是否有一个 LINQ 查询,我可以直接在数据库上查询,这样我就可以提供新的IDs 列表,并自动删除/添加它本身? (使用 Mysql )
" 强烈的 " CLACLATION 强烈的 " 我知道我需要两个SQL查询(或一个存储程序)。 问题是,我能否用一个动作来决定清单中的差别,以及能否比这个速度更快。
<强 > EDIT2 强 >
SP Firedrake 的操作似乎比我的散列器版本更快, 但我不知道如何决定要添加哪些内容和从数据库中删除哪些内容。 是否有办法将这些信息包含在操作中?
t1.Union(t2).Except(t1.Intersect(t2))
<强 > EDIT3 强 >
我忘了,我忘记了这个说法实际上有延缓执行的问题, 尽管在案的任何人在想, 我用一个定制比较器和一个附加变量 来决定它来自哪个列表,解决了以前的问题。