• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

        }                    

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap