C#学习教程:合并从不同表投影到一个实体的两个可查询对象但我不断收到以下错误:“Estudio”类型出现在单个LINQtoEntities查询中的两个结构不兼容的初始化中。可以在同一个查询的两个地方初始化类型,但前提是在两个地方都设置了相同的属性,并且这些属性以相同的顺序设置。我使用以下代码从两个不同但相似的实体框架实体(EXAMEN和EXPLORACION)映射到我的域实体Estudio。IQueryablelistExamen=context.Set().Project().To();IQueryablelistExploracion=context.Set().Project().To();varlistCombined=listExamen.Concat(listExploracion);无论如何使用两个列表合并生成IQueryable(不可枚举)?如果使用AsEnumerable(),则会对内存执行以下过滤器(Order、Take等)。所以我需要合并列表,但仍然能够在不执行查询的情况下将过滤器应用于合并的列表。//这将强制下一个条件在内存上执行varlistCombined=listExamen.AsEnumerable().Concat(listExploracion);那可能吗?我会尝试在您的linq查询中选择您的数据作为匿名类型,执行联合,并添加您的条件。varlistExamen=context.Examen.Select(x=>new{x.Prop1,x.Prop2,...});//添加属性varlistExploracion=context.Exploraction.Select(x=>new{x.Prop1,x.Prop2,...});//添加相同的属性varlistCombined=listExamen.Concat(listExploracion);varwhereAdded=listCombines.Where(x=>x.Prop1==someValue);varresult=whereAdded.Skip(skipCount).Take(takeCount).ToList();注意:我不知道你是否可以组合公用表表达式(跳过/获取的SQL必要性)注意:我已经更改了用于创建表达式的方法,因为我不知道你的方法(Project,To)我认为解决方案不是转换为特定类型,而是转换为匿名类型,因为这可能会转换为SQL。警告:未测试我的解决方案是修改我的映射代码。我没有使用单独的基于属性的映射器,而是一次投影整个实体,确保所有属性都以相同的顺序给出。因此,而不是ForMember语法:Mapper.CreateMap().ForMember(p=>p.Name,cfg=>cfg.MapFrom(c=>c.Person.FirstName+""+c.Person.LastName))..。我使用了ProjectUsing语法:Mapper.CreateMap().ProjectUsing(c=>newPersonResult(){Name=c.Person.FirstName+""+c.Person.LastName...});这一定是因为AutoMapper其投影的构造方式。解决这个问题的一种方法是添加一个虚拟类型:classEstudio:Estudio{}和一个新地图:Mapper.CreateMap();Mapper.CreateMap>();Mapper.CreateMap>();请注意,在Estudio中,所有字段都需要一些映射值。你不能使用忽略。返回0或""没问题。现在我们可以做到了:以上是C#学习教程:Mergeallthecontentsharedby2iqueryablesprojectedfromdifferenttablestooneentity。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——vara=context.Set().ProjectTo>();varb=context.Set().ProjectTo>();返回a.ProjectTo().Concat(b.ProjectTo());不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
