如何用于IGrouping的Mapper.Map

时间:2015-01-08 04:28:41

标签: asp.net-mvc grouping automapper

使用AutoMapper时遇到问题

我的代码:

public static IQueryable<IGrouping<Int64, GroupTimeSheetViewModel>> ToListGroupViewModel(this IQueryable<IGrouping<Int64, GroupTimeSheet>> entity)
    {
        return Mapper.Map<IQueryable<IGrouping<Int64, GroupTimeSheet>>, IQueryable<IGrouping<Int64, GroupTimeSheetViewModel>>>(entity);
    }

当我运行我的代码时,我收到错误:

  

值“System.Collections.Generic.List 1[PG.Admin.Models.TimeSheetHeaders.GroupTimeSheetViewModel]" is not of type "System.Linq.IGrouping 2 [System.Int64,PG.Admin.Models.TimeSheetHeaders.GroupTimeSheetViewModel]”并且不能在此通用集合中使用。   参数名称:值

1 个答案:

答案 0 :(得分:2)

AutoMapper无法直接映射可查询对象。如果我是你,我会使用AutoMapper's LINQ projection capabilities。它使用LINQ来构建Select投影。这样,你得到的LINQ就像:

dbContext.GroupTimeSheets
   .GroupBy(ts => ts.Something)
   .Project().To<GroupTimeSheetViewModel>()
   .ToListAsync();