【C#】两个list根据某个元素⽐较差集
1.今天突然跟前端有⼀点⼩⼩的分歧,传输数据和数据库⾥的数据做⽐对,该前端做处理还是后端,(并不是都不愿意做,相反,都愿意在⾃⼰那端处理= =)
2.最后终于归结我这了,好久之前做过list⽐对,记得刚写代码的时候,两个list⽐对?那就⽆限foreach呗,当然实现是能实现,这就很影响⽐对效果和代码的整洁度了。
3.接下来,我回忆起来了我之前写过的⼀个⽐较⽅法,拿出来记录⼀下
//重写⽐较⽅法
public class SkuEqualityComparer : IEqualityComparer<Sku>
{
public bool Equals(Sku x, Sku y)
{
lor== y.color&& x.itemno== y.itemno&& x.size== y.size;
}
public int GetHashCode(Sku obj)
{
if (obj == null)
{
return0;
}
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);
}
}
好啦,这样我们就很好的解决了后端和前端的数据传输问题。
纯属记录⼀下,今天回想⼗分钟才想起来= =

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。