List<model>需要根据特定字段求差集的实现
list对象不能直接使用Except等封装好的函数,因为内存地址不一样(还有一些数虽然主数据一致但是update/create信息也不一致,对,我碰到的需求就是这么难受 TOT)
这时候我们的需求很多时候是想通过特定字段来进行比较判断,所以我们需要重写GetHashCode()与Equals(object obj)来进行定义:
public override int GetHashCode() { return this.attribute.GetHashCode(); } public override bool Equals(object obj) { return this.attribute== (obj as model).attribute; }
然后 我们就能愉快的求差集了,比如我的需求是list1-list2的集合进行update,list2-list1的集合进行insert:
//获取差集 IEnumerable<T_CME_DifficultHospital> listUpdate = listDatabase.Except(listImport); IEnumerable<T_CME_DifficultHospital> listInsert = listImport.Except(listDatabase); //原数据有数据,但是新导入的没有的更新flag=0 foreach (T_CME_DifficultHospital difficultHosp in listUpdate) { difficultHosp.Flag = "0"; difficultHosp.UpdateTime = DateTime.Now; difficultHosp.UpdateBy = this.ProcBasePage.CurrentUser.UserAccount; DifficultHospitalManager.Instance.Update(difficultHosp); } //原数据没有该数据,新导入的有,则insert新数据 foreach (T_CME_DifficultHospital difficultHosp in listInsert) { DifficultHospitalManager.Instance.Create(difficultHosp); }
好了~ 收工~~