两个list比较交集,差集
Posted tian-yi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个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); } }
好啦,这样我们就很好的解决了后端和前端的数据传输问题。
纯属记录一下,今天回想十分钟才想起来= =
以上是关于两个list比较交集,差集的主要内容,如果未能解决你的问题,请参考以下文章