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

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

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

  • 相关阅读:
    图片上传iOS
    SpringMVC最基础配置
    随笔- 人生感悟
    学习SpringMVC——从HelloWorld开始
    springMVC
    struts2简介
    Struts2 实例
    java多线程
    服务器非正常断电后自动加电重启如何设置?!
    delphi for android 获取手机号
  • 原文地址:https://www.cnblogs.com/tian-yi/p/10815590.html
Copyright © 2020-2023  润新知