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

        }                    

好啦,這樣我們就很好的解決了后端和前端的數據傳輸問題。

純屬記錄一下,今天回想十分鍾才想起來= =


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM