一次项目有这样的需求,本地存储了json数据,可以转化为对应的List列表,现在需要更新,从服务器那里获取最新的数据更改。总的来说就是本地有个List表,如果数据需要更新,则会向服务器发送请求来获取需要更改的部分List表格,然后客户端这边就要去处理合并完整这次的更新,弄了一个下午,终于搞定,这次来mark一下。

主要推送的数据的两个特性:

1.如果之前的列表需要增加,则出现在最新的数据推送List中

2.如果数据需要修改的话,则一样推送更新,保持id不变,内容有所改变

示例代码如下图:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace test
{
public class date
{
public int id { set; get; }
public string color { set; get; }
public string name { set; get; }
public decimal price { set; get; } public string time { get; set; }
} class MyComparer : IEqualityComparer<date>
{
public bool Equals(date x, date y)
{
return x.id == y.id;
} public int GetHashCode(date obj)
{
return obj.id.GetHashCode();
}
} class Program
{
static void Main(string[] args)
{
List<date> list1 = new List<date>()
{
new date() { id = , color = "", name = "name1", price = ,time="时间" },
new date() { id = , color = "", name = "name2", price = ,time="时间" },
new date() { id = , color = "", name = "name3", price = ,time="时间" },
new date() { id = , color = "", name = "name5", price = ,time="时间" },
new date() { id = , color = "", name = "name8", price = ,time="时间" }
};
List<date> list2 = new List<date>()
{
new date() { id = , color = "修改", name = "修改", price = ,time="时间" },
new date() { id = , color = "增加", name = "增加", price = ,time="时间" }
};
var result = list2.Union(list1, new MyComparer());
foreach (var item in result)
{
Console.WriteLine("id = {0}, card = {1}, name = {2}, price = {3}", item.id, item.color, item.name, item.price,item.time);
}
}
}
}

测试的结果为:

从结果看出,id=1的数据需要修改,所以最新生成的List表中id为1的所有属性都是更改后的结果,而在list1中没有id为8的数据,说明这个是需要新增进去的一条记录,因此在最新的List也有了,这次主要用到自定义的比较器,去实现IEqualityComparer<>这个接口。另外还用到了Lambda表达式

var result = list2.Union(list1, new MyComparer());特别是Union这个方法的使用,该方法还有很多种用法,这里就举个例子而已啦

源码下载地址为:http://files.cnblogs.com/xmfdsh/Lambda%E4%BB%A5%E5%8F%8A%E6%AF%94%E8%BE%83%E5%99%A8.zip

Lambda加自定义比较器实现两个列表的合并的更多相关文章

  1. python 如何在一个for循环中遍历两个列表

    是我在看<笨方法学python>过程中发现有一行代码看不懂--" for sentence in snippet, phrase:",所以研究了半天,感觉挺有收获的.所 ...

  2. EntityFramework Core 2.0自定义标量函数两种方式

    前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...

  3. python两个列表合并为字典,一个作为key,一个作为value

    两个列表合并为一个字典函数list_dic(list1,list2)可以直接复制拿走 传入的参数为两个列表,list1准备作为key,list2准备作为value,key和value位置一一对应. d ...

  4. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  5. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  6. 通知url必须为直接可访问的url,不能携带参数 异步接收微信支付结果通知的回调地址 不能携带参数。 回调地址后是否可以加自定义参数 同步回调地址 异步回调地址 return_url和notify_url的区别

    [微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7 通知url必须为直接可访问的 ...

  7. Java中的equals方法和自定义比较器

    Object中的equals()方法默认是按地址比较,而不按内容进行比较, public boolean equals(Object obj) { return (this == obj); } 在S ...

  8. 浅谈集合框架五——集合框架扩展:Collections工具类的使用,自定义比较器

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  9. 自定义比较器(IComparer接口的实现)

    class FileNameSort : IComparer { [System.Runtime.InteropServices.DllImport("Shlwapi.dll", ...

随机推荐

  1. 参考 generate-parentheses

    分析: 关键:当前位置左括号不少于右括号 图是什么?        节点:目前位置左括号和右括号数(x,y)(x>=y)        边:从(x,y)到(x+1,y)和(x,y+1)     ...

  2. Adversarial Training

    原于2018年1月在实验室组会上做的分享,今天分享给大家,希望对大家科研有所帮助. 今天给大家分享一下对抗训练(Adversarial Training,AT). 为何要选择这个主题呢? 我们从上图的 ...

  3. 嵌入式开发之davinci--- MSB和LSB

    简介: MSB是Most Significant Bit的缩写,最高有效位.在二进制数中,MSB是最高加权位.与十进制数字中最左边的一位类似.通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右 ...

  4. [转]软件测试- 3 - Mock 和Stub的区别

    由于一直没有完全搞明白Mock和Stub的区别,所以查了很多文章,而这一篇是做好的: http://yuan.iteye.com/blog/470418 尤其是8楼,Frostred的发言,描述地相当 ...

  5. mysql DBA 指南

    Mysql目录 数据库介绍.常见分类 Mysql入门 Mysql安装配置 Mysql多实例安装配置 Mysql常用基本命令 Mysql权限体系 Mysql数据库备份和恢复 Mysql日志 Mysql逻 ...

  6. ubuntu卸载vmware player

    sudo vmware-installer -u vmware-player 转自: http://zhidao.baidu.com/link?url=lapkBNBGIUz_mo6603CQgi_2 ...

  7. 7.解决谷歌的SDK更新失败问题。

    问题: 近期谷歌被墙之后,更新SDK老是失败.提示Download interrupted: Connection to https://dl-ssl.google.com refused(下载中断, ...

  8. Android获取 应用程序大小,数据大小,缓存大小

    在项目中创建,android.content.pm 包名.里面创建两个aidl文件.PackageStats.aidl  和 IPackageStatsObserver.aidl. PackageSt ...

  9. AngularJS 讲解,一 数据绑定

    AngularJS 完全使用javascript 编写的客户端技术.通过原生的Model-View-Controller(MVC,模型视图控制器)功能增强了HTML.这个选择可以快捷和愉悦地构建出 ...

  10. dubbo 序列化 问题 属性值 丢失 ArrayList 解决

    参考文章:http://blog.csdn.net/wanyanxgf/article/details/6944733 http://tianya23.blog.51cto.com/1081650/5 ...