我使用Automapper和Queryable Extensions将一些(类似的)模型投影到同一个DTO中,以便在数据库服务器上(通过实体框架)连接和排序它们,而不返回数据,直到它为止寻呼。
var tasksType1 = context.TasksType1.Project().To<MyDto>();
var tasksType2 = context.TasksType2.Project().To<MyDto>();
var allTasks = tasksType1.Concat(tasksType2);
return allTasks.ToMyPagedList()
这很好用,除了现在我的模型稍微复杂一点,Automapper似乎每次都会以稍微不同的顺序初始化投影,这会导致错误:
类型&#39; AngularJSAuthentication.API.Dtos.ActivityDashboard.ActivityDashboardDto2&#39;在单个LINQ to Entities查询中出现两个结构不兼容的初始化。可以在同一查询中的两个位置初始化类型,但前提是在两个位置都设置了相同的属性,并且这些属性的设置顺序相同。
有没有办法强制Automapper以可控方式初始化投影?我已经设置了映射来使用.ForMember和.MapFrom来定义每个属性,两种类型的顺序完全相同,但即使这样做也没有,并且查看创建的SQL,它没有&# 39;似乎与初始模型中的属性顺序有任何关系。
感激不尽的任何建议!
答案 0 :(得分:0)
我修改此查询以将两者连接在一起,然后应用投影:
var tasksType1 = context.TasksType1;
var tasksType2 = context.TasksType2;
var allTasks = tasksType1.Concat(tasksType2);
return allTasks.ProjectTo<MyDto>().ToMyPagedList()
LINQ提供程序可能无法处理投影的复杂性然后处理连接,但可能能够处理相反的情况。
一般情况下,对于AutoMapper,我尝试将投影作为整个过程中的最后一步。