【C#】两个list根据某个元素比较差集

1.今天突然跟前端有一点小小的分歧,传输数据和数据库里的数据做比对,该前端做处理还是后端,(并不是都不愿意做,相反,都愿意在自己那端处理= =)

2.最后终于归结我这了,好久之前做过list比对,记得刚写代码的时候,两个list比对?那就无限foreach呗,当然实现是能实现,这就很影响比对效果和代码的整洁度了。

3.接下来,我回忆起来了我之前写过的一个比较方法,拿出来记录一下

//重写比较方法
        public class SkuEqualityComparer : IEqualityComparer<Sku>
        {
            public bool Equals(Sku x, Sku y)
            {
                return x.color== y.color&& x.itemno== y.itemno&& x.size== y.size;
            }

            public int GetHashCode(Sku obj)
            {
                if (obj == null)
                {
                    return 0;
                }
                else
                {
                    return obj.ToString().GetHashCode();
                }
            }
        }

我重写了一个根据sku的颜色,货号,尺寸来比较的equality方法,接下来添加sku的list

public Tuple<bool, string> AddSku(List<Sku> model)
        {

           
            List<string> list = new List<string>();
           
            //假设从数据库查出来1,2,5
            var isExsit = _skuRepository.GetSkuList(where);//where条件此处省略
            //前端传来的model  2,3,4,5
           //那么我需要比对出来的是2,5
            if (isExsit.Count() > 0)
            {
                //只取出sku颜色,货号,尺码相同的交集(2,5)
                var sqlData = model.Intersect(isExsit, new SkuEqualityComparer()).ToList();
            //遍历当前list
                foreach (var item in sqlData)
                {
                    //查询当前数据信息(2)                  
                    var sku= _skuRepository.GetSkuList(where1).FirstOrDefault();//where1条件此处省略
                    //对比客户端的(2)和数据库的(2)有效期是否相同
                    if (item.price!= sku.price)
                    {
                        //如果有效期不同,则在记录表插入
                      list.Add($"insert into skuInfo (name) values ('sku的name')");
                      
                    }
                }
    
                list.Add($"delete from Sku where 1=1  {where}");
                return _skuRepository.AddSkuInfo(model, list);
            }
            else
            {                
                return _skuRepository.AddSkuInfo(model, list);
            }

        }                    

好啦,这样我们就很好的解决了后端和前端的数据传输问题。

纯属记录一下,今天回想十分钟才想起来= =

posted @ 2019-05-05 19:09  余生很长_慢慢说  阅读(7494)  评论(2编辑  收藏  举报