大家好:
(1)今天遇到一个需求,
比较List<model>oldList,List<model>newList
中的model 的属性,
model.Id 不相等的,插入newList的对象。
model.Id 相等的,且 model.property 不同,更新oldList
(2)我用方法实现了部分,但效率很低,代码如下.
1 /// <summary> 2 /// 得到新旧集合中相同的RecId 3 /// </summary> 4 /// <param name="newRecId"></param> 5 /// <param name="oldlistPara"></param> 6 /// <returns></returns> 7 public bool GetSameRecIdByRevenueConfirmLineList(int newRecId, List<RevenueConfirmLine> oldlistPara) 8 { 9 bool isSameRecid = false; 10 11 foreach (var oldRevenueConfirmLine in oldlistPara) { 12 if (newRecId == oldRevenueConfirmLine.RecId)//判断值类型非空 13 { 14 isSameRecid = true; 15 break; 16 }//the end if 17 } 18 return isSameRecid; 19 }//the end GetSameRecIdByRevenueConfirmLineList 20 21 22 /// <summary> 23 /// 比较新旧集合的数据操作 24 /// </summary> 25 /// <param name="newlistPara"></param> 26 /// <param name="oldlistPara"></param> 27 public void CompareRevenueConfirmLineList(List<RevenueConfirmLine> newlistPara, List<RevenueConfirmLine> oldlistPara) 28 { 29 foreach (var newRevenueConfirmLine in newlistPara) 30 { 31 try 32 { 33 if (GetSameRecIdByRevenueConfirmLineList(newRevenueConfirmLine.RecId,oldlistPara)) //IsDbNull 异常 34 { 35 //调取单条更新:newRevenueConfirmLine 36 BLL.RevenueConfirmBll.Instance.UpdateRevenueConfirmLineInfo(newRevenueConfirmLine); 37 } 38 else 39 { 40 //取单个对象生成数据添加 41 BLL.RevenueConfirmBll.Instance.AddRevenueConfirmLine(newRevenueConfirmLine); 42 } 43 44 } 45 catch (Exception ex) 46 { 47 string strErrorMsg=ex.Message; 48 throw; 49 } 50 }// the end newRevenueConfirmLine 51 }// the end CompareRevenueConfirmLineList
(3) 我通过关键字compare two list<model>查询了 stackoverflow ,但现在工程里用的是Framework 2.0,不太支持Linq这个的语法糖,请教大家有什么文章或思路可以分享下
2.http://forums.asp.net/t/1905653.aspx?Comparing+two+rows+in+two+models+and+find+similarities+in+MVC3
分数真心不多了
谢谢大家啦:)
我的做法是把旧的List的id属性和对象,构建一个Dictionary<int,Model>,然后新的List,来做比较。这样只需要两次循环List就可以了。当然内存消耗相对要大点。而且,属性不同就更新的话,没必要判断吧,直接覆盖。