需求:通过接口获取数据,与数据库数据进行比较,进行增量更新。所以有集合比较,查找重复数据的问题。
假设表(类)Classroom 字段:id(自增列),sncode,name。接口只能获取code和name。
解决方案一:通过双重循环去解决,基本方法不写代码了。
解决方案二:通过重写对象Equals方法解决。将需要比较的字段在return和hash的时候加进去
public class Classroom
{
public int id { get; set; }
public string sncode { get; set; }
public string name { get; set; }
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if ((obj.GetType().Equals(this.GetType())) == false)
{
return false;
}
Classroom temp = null;
temp = (Classroom)obj;
return this.sncode.Equals(temp.sncode) && this.name.Equals(temp.name);
}
//重写GetHashCode方法(重写Equals方法必须重写GetHashCode方法,否则发生警告
public override int GetHashCode()
{
return this.sncode.GetHashCode() + this.name.GetHashCode();
}
}
在集合比较的时候使用:List<Classroom> listnew = listDown.Except(listDatabase).ToList();获取增量数据
解决方案三:由于重写Equals方法影响比较大,在需要比较内容不多的时候也可以直接通过List的Exists去比较
List<Classroom> listNew = listDown.Where(a => !listDatabase.Exists(t => a.sncode.Contains(t.sncode))).ToList();
listDatabase为数据库保存到额对象集合
listDown接口获取的新数据集合
listnew差异结果集
P.S:很久没写代码了,很多基本功都忘得差不多了。有个机会写写基础代码,还是留点记录。