2015-04-25 3 views
0

В моем классе бизнес-логики я соединяю две модели данных и возвращаюсь к контроллеру как IEnumerable. Мне нужно сопоставить эту коллекцию с List, используя automapper. Но она не работает должным образом.Сопоставление объединенной модели домена для просмотра модели с использованием Automapper

Логика класса

public IEnumerable<object> GetPurchaseOrderDetailsByPersonId(long personId) 
    { 
     var purchaseOrderDetails = from pom in _unitOfWork.DbSet<PurchaseOrderMain>() 
            join rep in _unitOfWork.DbSet<RepresentativeMaster>() on pom.REPM_ID equals rep.REPM_ID 
            where pom.REPM_ID == personId 
            select new { pom.RM_ID,pom.OrderNo,pom.OrderAmount,pom.OrderDate ,rep.RepName }; 

     return purchaseOrderDetails; 
    } 

Контроллер

public ActionResult Index() 
    { 
     List<object> purchaseOrder = _CLS_PurchaseOrder_BLL.GetPurchaseOrderDetailsByPersonId(PersonId).ToList(); 

     return View(purchaseOrder.ToEntity<OMOS.Models.PurchaseOrderDetails>()); 
    } 

ToEntity() в классе расширения

public static List<TDestination> ToEntity<TDestination>(this List<object> OBJSource) 
    { 
     AutoMapper.Mapper.CreateMap<object, TDestination>(); 
     List<TDestination> destination = new List<TDestination>();//Handling the null destination 
     foreach (object source in OBJSource) 
     { 
      destination.Add(AutoMapper.Mapper.Map<object, TDestination>(source)); 
     } 
     return destination; 
    } 

Но приведенное отображение не так, как ожидалось.

+0

Почему вы используете 'object' вместо фактического класса? Automapper не сможет сопоставлять объект, поскольку он, вероятно, не будет использовать никаких свойств, которые имеет свойство «PurchaseOrderDetails». – webnoob

+0

Поскольку он связан с одним или несколькими классами, у меня нет фактического класса. Это анонимный тип одного или нескольких подключенных. –

+0

Для этого вам нужно создать для этого какой-то класс упаковки. – webnoob

ответ

1

Изменить свой код следующим образом:

public static List<TDestination> ToEntity<TDestination>(this List<object> OBJSource) 
    { 
     List<TDestination> destination = new List<TDestination>();//Handling the null destination 

     foreach (object source in OBJSource) 
      destination.Add(AutoMapper.Mapper.DynamicMap<TDestination>(source)); 

     return destination; 
    } 
+0

То, что мне нужно. –