首页 新闻 会员 周边 捐助

比较两个集合中属性的查询,进行更新或添加

0
悬赏园豆:10 [已解决问题] 解决于 2016-03-06 21:51

大家好:

  (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这个的语法糖,请教大家有什么文章或思路可以分享下

  1.http://stackoverflow.com/questions/23581379/compare-two-lists-of-object-for-new-changed-updated-on-a-specific-property

  2.http://forums.asp.net/t/1905653.aspx?Comparing+two+rows+in+two+models+and+find+similarities+in+MVC3

 

分数真心不多了

谢谢大家啦:)

Frank铭的主页 Frank铭 | 初学一级 | 园豆:8
提问于:2015-04-22 21:43
< >
分享
最佳答案
0

我的做法是把旧的List的id属性和对象,构建一个Dictionary<int,Model>,然后新的List,来做比较。这样只需要两次循环List就可以了。当然内存消耗相对要大点。而且,属性不同就更新的话,没必要判断吧,直接覆盖。

收获园豆:10
幻天芒 | 高人七级 |园豆:37205 | 2015-04-23 10:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册