这个泛型方法目的是比较两个list的object对象,把两个list中不一样的对象提取出来。前提条件是在比较前先给他们排序。
/// <summary>
/// 同步IDC数据
/// </summary>
/// <returns></returns>
public bool SyncIDC()
{
try
{
List<IDCEntity> videIdcs = DataAccessFacade.Instance.GetVideIDCs();
List<IDCEntity> vimopIdcs = DataAccessFacade.Instance.GetVimopIDCs();
var videidcsids = (from item in videIdcs
select item.IDC_ID).ToList();
var vimopidcsids = (from item in vimopIdcs
select item.IDC_ID).ToList();
var delvimopidcs = (from item in vimopIdcs
where !videidcsids.Contains(item.IDC_ID)
select item).ToList();
foreach (IDCEntity idc in delvimopidcs)
{
DataAccessFacade.Instance.DelVimopIDCs(idc.IDC_ID);
vimopIdcs.Remove(idc);
}
var addvimopidcs = (from item in videIdcs
where vimopidcsids.Contains(item.IDC_ID)
select item).ToList();
foreach (IDCEntity idc in addvimopidcs)
{
DataAccessFacade.Instance.AddVimopIDCs(idc);
vimopIdcs.Add(idc);
}
if (videIdcs.Count != vimopIdcs.Count)
{
ICLogger.Instance.Error("奇怪了,应该两个数量是一样的");
return false;
}
videIdcs.Sort(
delegate(IDCEntity a, IDCEntity b)
{
return a.IDC_ID.CompareTo(b.IDC_ID);
}
);
vimopIdcs.Sort(
delegate(IDCEntity a, IDCEntity b)
{
return a.IDC_ID.CompareTo(b.IDC_ID);
}
);
List<IDCEntity> differenceIdcs = GetDifferenceObj(videIdcs, vimopIdcs);
foreach (IDCEntity idc in differenceIdcs)
{
DataAccessFacade.Instance.UpdateVimopIDCs(idc);
}
}
catch (Exception e)
{
ICLogger.Instance.Error(e);
return false;
}
return true;
}
/// <summary> /// 比较泛型对象,把不同的数据取出来,用于更新 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="videsource"></param> /// <param name="vimopobject"></param> /// <returns></returns> private List<T> GetDifferenceObj<T>(List<T> videsource, List<T> vimopobject) { List<T> c = new List<T>(); for (int i = 0; i < videsource.Count; i++) { if (!JsonConvert.SerializeObject(videsource[i]).Equals(JsonConvert.SerializeObject(vimopobject[i]))) { c.Add(videsource[i]); } } return c; }