比較兩個List物件,找出新增、刪除、更改的條目

llnnmc發表於2019-12-14

需求說明

我們在開發過程中,經常需要對比兩個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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章