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);
                        }

好了~ 收工~~

 

posted @ 2019-11-04 16:33  T丶MELO  阅读(1039)  评论(0编辑  收藏  举报