2016-09-30 22 views
1
class Employee 
{ 
    int Id { get; set; } 
    string Name { get; set; } 
} 

class ServiceIEmployeeModel 
{ 
    int Id { get; set; } 
    string Name { get; set; } 
} 

以上员工和ServiceIEmployeeModel类应该自动映射其视图表示。我想在c#中做一个通用的方法,我想返回一个记录列表

//My Generic Method below 
public List<U> ListMapping<T, U>(List<T> sourceClass) 
{   
      var config = new MapperConfiguration(cfg => { cfg.CreateMap<T, U>(); }); 
      IMapper mapper = config.CreateMapper(); 
      List<U> finalData = mapper.Map<List<T>, List<U>>(sourceClass); 
      return finalData; 
} 

List<Employee> employeeData = new List<Employee>(); 
List<ServiceIEmployeeModel> obj = new List<ServiceIEmployeeModel>(); 

    ServiceIEmployeeModel obj = new ServiceIEmployeeModel(); 
    obj.Id = 2; 
    obj.Name = "xyz";  

employeeData = 
ListMapping<List<ServiceIEmployeeModel>, List<Employee>>(sourceClass:obj); 

我想在c#中做一个通用的方法,我想返回记录列表。

我有以下代码来调用泛型方法:

But i get an error saying :- 
Error CS1503 Argument 1: cannot convert from 'System.Collections.Generic.List<ServiceIEmployeeModel>' 
to 'System.Collections.Generic.List<System.Collections.Generic.List<ServiceIEmployeeModel>>' 
Msc.MasterData.Presentation.Web C:\Users\sabarimani.a\Desktop\Presentation.Web\Web\Controllers\EmployeeController.cs 59 
    Active 
+0

我只想指出,每次映射类时创建映射都是非常糟糕的主意。应该只做一次,然后用DI注入映射器。或者使用静态映射器来映射对象。 – juunas

回答

2

ListMapping方法接受类型参数,并试图映射该类型的名单。注意这一行:

List<U> finalData = mapper.Map<List<T>, List<U>>(sourceClass); 

当你通过List<ServiceIEmployeeModel>List<Employee>类型parametets这种方法的话,TList<ServiceIEmployeeModel>UList<Employee>类型和List<U> finalData = mapper.Map<List<T>, List<U>>(sourceClass);行会居然喜欢:

List<List<Employee>> finalData = mapper 
    .Map<List<List<ServiceIEmployeeModel>>, List<List<Employee>>>(sourceClass); 

而这不是你想达到的。相反,请调用此方法,如:

List<ServiceIEmployeeModel> initialData = .....; 
employeeData = 
    ListMapping<ServiceIEmployeeModel, Employee>(initialData); 
+0

我已经用Class替换了List参数,并且它可以工作。谢谢。 –

+0

@ S.Vidhya,不客气 –

相关问题