先描述需求: 表A中有个字段S内容是用逗号分隔开的,里边存的是表B的ID。当在修改A中数据的时候就需要修改S的内容这时候因为B表是在另一个库中存在的,如果直接全部删除旧的然后全部添加新的会影响效率,所以要先区别出不同的做处理,然后再操作数据库。
public static void Compare(string[] arrFirst, string[] arrSecond, out List<string> lstAdd,out List<string> LstRemove)
{
lstAdd = new List<string>();
LstRemove = new List<string>();
if (arrFirst.Length <= 0 && arrSecond.Length <= 0)
{
lstAdd = null;
LstRemove = null;
}
//添加
if (arrFirst.Length <= 0)
lstAdd = arrSecond.ToList();
//删除
if(arrSecond.Length<=0)
LstRemove = arrFirst.ToList();
for (int i = 0; i < arrFirst.Length; i++)
{
//if (arrSecond.Where(x => x == arrFirst[i]) == null)
if(!arrSecond.Contains(arrFirst[i]))
LstRemove.Add(arrFirst[i]);
}
for (int i = 0; i < arrSecond.Length; i++)
{
if (!arrFirst.Contains(arrSecond[i]))
lstAdd.Add(arrSecond[i]);
}
//去重
LstRemove.Distinct();
lstAdd.Distinct();
}
最后调用测试
static void Main(string[] args)
{
Console.WriteLine("-----请输入第一个数------");
var strFirst = Console.ReadLine();
Console.WriteLine("-----请输入第二个数------");
var strSecond = Console.ReadLine();
var arrFirst = strFirst.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
var arrSecond = strSecond.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
List<string> lstAdd; List<string> LstRemove;
Compare(arrFirst, arrSecond, out lstAdd, out LstRemove);
if (lstAdd != null)
{
foreach (var item in lstAdd)
{
Console.WriteLine("要添加的ID有{0}", item);
}
}
if (LstRemove != null)
{
foreach (var item in LstRemove)
{
Console.WriteLine("要删除的ID有{0}",item);
}
}
Console.ReadKey();
}
结果
欢迎加技术讨论群169767436 大家共同交流进步。