1. 程式人生 > >DataTable與List之間的交集、差集

DataTable與List之間的交集、差集

C# 專案中經常遇到這樣的情況:選定的項與原DataTable中的資料進行對比,將資料變動部分利用Adapter寫入資料庫。

對於同一型別的而言很容易實現,而對於不同型別而言則看似複雜,實則也很簡單

以下是取交集程式碼:

    public partial class Program
    {
        static void Main(string[] args)
        {
            List<Class> list = new List<Class>();
            list.Add(new Class() { Id = 1, Caption = "a" });
            list.Add(new Class() { Id = 2, Caption = "b" });
            list.Add(new Class() { Id = 3, Caption = "c" });
            list.Add(new Class() { Id = 5, Caption = "d" });
            list.Add(new Class() { Id = 6, Caption = "e" });

            DataTable dt = new DataTable();
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Text", typeof(string));
            dt.Rows.Add(1, "第一行");
            dt.Rows.Add(2, "第二行");
            dt.Rows.Add(3, "第三行");
            dt.Rows.Add(4, "第四行");
            var row = dt.AsEnumerable().Where(x =>
            {
                return (from a in list where a.Id == x.Field<int>("Id") select a).Any();
            });
            row.ToList().ForEach(x => { Console.WriteLine(x.Field<string>("Text")); });
            Console.ReadKey();

             
        }
    }
    public class Class
    {
        public Class() { }
        public int Id { get; set; } = 0;
        public string Caption { get; set; } = "";
    }

執行結果


若要實現差集,只需將Lambda改為以下形式即可。
 return !(from a in list where a.Id == x.Field<int>("Id") select a).Any();