需求说明
我们在开发过程中,经常需要对比两个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/,如需转载,请注明出处,否则将追究法律责任。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。