[C#] Linq Expression Mapper Model

 假設我們今天有一個modelA跟ModelB,那如果不使用AutoMapper,使用表達式有辦法將modelA轉換為ModelB嗎?答案是可以的,我們可以使用Invoke()來達到我們的目的。

實作:

1.建立測試用的模型


 /// 
        /// 測試模型
        /// 
        public class TestModel
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }
        /// 
        /// 測試模型A
        /// 
        public class TestModelA
        {
            public string Text { get; set; }
            public int value { get; set; }
        }

2.建立測試資料


 //測試資料
            var test = new TestModel()
            {
                Age = 5,
                Name = "Baby"
            };

3.建立Mapper用的表達式


  //TestModel 轉換為 TestModelA 表達式
            Expression< Func < TestModel , TestModelA > > selector = x => new TestModelA
            {
                Text=x.Name,
                value=x.Age
            };

4.轉換modelA資料到modelB


  var modelA = selector.Compile().Invoke(test);
            Console.WriteLine($"Text:{modelA.Text};value:{modelA.value};");

5.結果



*額外練習轉換List資料


  //List的做法相同 只是不需要Invoke()
            var list = new List()
            {
                new TestModel()
                {
                Age=5,
                Name="Baby"
                }
            };
            var modelAList = list.Select(selector.Compile()).ToList();

留言

這個網誌中的熱門文章

[Visual Studio]位於網際網路或是限制區域上 或是檔案上標有 web 字樣 所以無法處理該檔案。若希望處理這些檔案 請移除 web 字樣。

[IIS] IIS執行時,發生拒絕存取路徑 問題

[windows] xcopy 備份至 「網路磁碟機」