[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();
留言
張貼留言