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); } }
好啦,這樣我們就很好的解決了后端和前端的數據傳輸問題。
純屬記錄一下,今天回想十分鍾才想起來= =