自动映射器投影

Automapper projection

我对 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; }
}

如何使用自动映射器创建下一个投影

  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
        });

您不能 - AutoMapper LINQ 投影不会真正与您创建的中间匿名类型一起使用。在您的第一个 Select 中,您应该删除匿名类型:

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();

那你不需要第二个Select。您已经在手动投影,因此 AutoMapper 不会在这方面帮助您。