2015-04-27 5 views
0

У меня есть вопрос о проекции Automapper. У меня есть объект:Проигрыватель автопилота

public class SomeEntity 
{ 
    public string Name { get; set; } 

    public DateTime Date { get; set; } 

    public string Price { get; set; } 
} 

И DTO:

public class SomeDto 
{ 
    public string Name { get; set; } 

    public int Month { get; set; } 

    public string TotalPrice { get; set; } 
} 

Как я могу создать следующую проекцию с automapper

var data = new List<SomeEntity>().AsQueryable() 
     .GroupBy(p => new 
     { 
      p.Date.Month, 
      p.Name 
     }).Select(p => new 
     { 
      p.Key.Month, 
      p.Key.Name, 
      TotalPrice = p.Sum(entity => entity.Price) 
     }) 
     .ToList() 
     .Select(p => new SomeDto 
     { 
      Month = p.Month, 
      Name = p.Name, 
      TotalPrice = p.TotalPrice 
     }); 
+0

Это не то, для чего предназначен AutoMapper. – Alex

+0

Automapper Maps SomeEntity и SomeDto напрямую ... тогда вы можете сгруппировать SomeDto после этого. – aggietech

ответ

2

Вы не можете - AutoMapper LINQ проекции не будет реально работать с промежуточными анонимными типами, которые вы создали. В вашем первом Выберите, вы должны удалить анонимный тип:

var data = new List<SomeEntity>().AsQueryable() 
    .GroupBy(p => new 
    { 
     p.Date.Month, 
     p.Name 
    }).Select(p => new SomeDto 
    { 
     Month = p.Key.Month, 
     Name = p.Key.Name, 
     TotalPrice = p.Sum(entity => entity.Price) 
    }) 
    .ToList(); 

Тогда вам не нужен второй вариант. Вы уже вручную проецируете так, что AutoMapper вам не поможет.

Смежные вопросы