新闻资讯

新闻资讯 行业动态

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

编辑:006     时间:2020-03-12

需求说明

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

新建一个控制台程序

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

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

  1. public class Class1
  2. {
  3. public string Id { get; set; }
  4. public string Res { get; set; }
  5. }

构建两个List对象

  1. List<Class1> listA = new List<Class1>
  2. {
  3. new Class1 { Id = "1001", Res = "A1" },
  4. new Class1 {Id = "1002", Res = "A2" },
  5. new Class1 {Id = "1003", Res = "A3" }
  6. };
  7. List<Class1> listB = new List<Class1>
  8. {
  9. new Class1 { Id = "1001", Res = "B1" },
  10. new Class1 {Id = "1002", Res = "B2" },
  11. new Class1 {Id = "1004", Res = "B3" },
  12. new Class1 {Id = "1005", Res = "B4" },
  13. };

两个List对象条目做比对

  1. // 从listB中找出相对listA新增的
  2. var queryInsert = listB.Where(b =>
  3. {
  4. if (!listA.Any(a => a.Id == b.Id)) return true;
  5. return false;
  6. }).ToList();
  7. queryInsert.ForEach(q =>
  8. {
  9. WriteLine("新增项:" + q.Id + ", " + q.Res);
  10. });
  11. WriteLine();
  12. // 从listA中找出相对listB删除的
  13. var queryDelete = listA.Where(a =>
  14. {
  15. if (listB.All(b => b.Id !=a.Id)) return true;
  16. return false;
  17. }).ToList();
  18. queryDelete.ForEach(q =>
  19. {
  20. WriteLine("删除项:" + q.Id + ", " + q.Res);
  21. });
  22. WriteLine();
  23. // 从listB中找出相对listA更新的
  24. var queryUpdate = listB.Where(b =>
  25. {
  26. if (listA.Any(a => a.Id == b.Id)) return true;
  27. return false;
  28. }).ToList();
  29. queryUpdate.ForEach(q =>
  30. {
  31. WriteLine("更新项:" + q.Id + ", " + q.Res);
  32. });

输出结果

输出结果

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

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐