C#中使用Lambda表达式自定义比较器实现两个列表合并实例
一次项目有这样的需求,本地存储了json数据,可以转化为对应的List列表,现在需要更新,从服务器那里获取最新的数据更改。总的来说就是本地有个List表,如果数据需要更新,则会向服务器发送请求来获取需要更改的部分List表格,然后客户端这边就要去处理合并完整这次的更新,弄了一个下午,终于搞定,这次来mark一下。
主要推送的数据的两个特性:
1.如果之前的列表需要增加,则出现在最新的数据推送List中
2.如果数据需要修改的话,则一样推送更新,保持id不变,内容有所改变
示例代码如下图:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text;
namespacetest { publicclassdate { publicintid{set;get;} publicstringcolor{set;get;} publicstringname{set;get;} publicdecimalprice{set;get;}
publicstringtime{get;set;} }
classMyComparer:IEqualityComparer<date> { publicboolEquals(datex,datey) { returnx.id==y.id; }
publicintGetHashCode(dateobj) { returnobj.id.GetHashCode(); } }
classProgram { staticvoidMain(string[]args) { List<date>list1=newList<date>() { newdate(){id=1,color="1",name="name1",price=1,time="时间"}, newdate(){id=2,color="2",name="name2",price=2,time="时间"}, newdate(){id=3,color="3",name="name3",price=3,time="时间"}, newdate(){id=5,color="5",name="name5",price=5,time="时间"}, newdate(){id=6,color="6",name="name8",price=8,time="时间"} }; List<date>list2=newList<date>() { newdate(){id=1,color="修改",name="修改",price=2,time="时间"}, newdate(){id=8,color="增加",name="增加",price=2,time="时间"} }; varresult=list2.Union(list1,newMyComparer()); foreach(variteminresult) { Console.WriteLine("id={0},card={1},name={2},price={3}",item.id,item.color,item.name,item.price,item.time); } } } }