ITPub博客

首页 > 应用开发 > .net > 比较两个List对象,找出新增、删除、更改的条目

比较两个List对象,找出新增、删除、更改的条目

原创 .net 作者:llnnmc 时间:2019-12-14 17:46:08 0 删除 编辑

需求说明

我们在开发过程中,经常需要对比两个List对象的数据,找出新增、删除、更改的条目。典型的情况如需要根据前端给出的请求列表,与后台表中当前具有的记录做比较,然后对后台表做增、删、改的操作。为此,以下举例总结List对象的比对方法。

新建一个控制台程序

新建一个控制台程序作为例子。

定义一个记录数据条目的类

    public class Class1
    {
        public string Id { get; set; }
        public string Res { get; set; }
    }

构建两个List对象

    List<Class1> listA = new List<Class1>
    {
        new Class1 { Id = "1001", Res = "A1" },
        new Class1 {Id = "1002", Res = "A2" },
        new Class1 {Id = "1003", Res = "A3" }
    };
    List<Class1> listB = new List<Class1>
    {
        new Class1 { Id = "1001", Res = "B1" },
        new Class1 {Id = "1002", Res = "B2" },
        new Class1 {Id = "1004", Res = "B3" },
        new Class1 {Id = "1005", Res = "B4" },
    };

两个List对象条目做比对

    // 从listB中找出相对listA新增的
    var queryInsert = listB.Where(b =>
    {
    if (!listA.Any(a => a.Id == b.Id)) return true;
    return false;
    }).ToList();
    queryInsert.ForEach(q =>
    {
    WriteLine("新增项:" + q.Id + ", " + q.Res);
    });
    WriteLine();
    // 从listA中找出相对listB删除的
    var queryDelete = listA.Where(a =>
    {
    if (listB.All(b => b.Id !=a.Id)) return true;
    return false;
    }).ToList();
    queryDelete.ForEach(q =>
    {
    WriteLine("删除项:" + q.Id + ", " + q.Res);
    });
    WriteLine();
    // 从listB中找出相对listA更新的
    var queryUpdate = listB.Where(b =>
    {
    if (listA.Any(a => a.Id == b.Id)) return true;
    return false;
    }).ToList();
    queryUpdate.ForEach(q =>
    {
    WriteLine("更新项:" + q.Id + ", " + q.Res);
    });

输出结果

输出结果

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28974745/viewspace-2668639/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-12-29

  • 博文量
    107
  • 访问量
    132300