我努力了这个答案 https://stackoverflow.com/questions/4003813/how-to-merge-two-iqueryable-lists, This one https://stackoverflow.com/questions/1902082/how-to-merge-result-iqueryablet-together and this one https://stackoverflow.com/questions/1578778/using-iqueryable-with-linq合并两个 iqueryable。但我总是收到以下错误:
类型“Estudio”出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中。可以在同一查询中的两个位置初始化类型,但前提是在两个位置设置相同的属性并且以相同的顺序设置这些属性。
我使用以下代码从两个不同但相似的实体框架实体(EXAMEN 和 EXPLORACION)映射到我的域实体 Estudio。
IQueryable<Estudio> listExamen = context.Set<EXAMEN>().Project().To<Estudio>();
IQueryable<Estudio> listExploracion = context.Set<EXPLORACION>().Project().To<Estudio>();
var listCombined = listExamen.Concat(listExploracion);
无论如何,是否可以通过合并两个列表来生成 IQueryable (不可枚举)?如果AsEnumerable()使用,然后在内存上执行以下过滤器(Order、Take 等)。因此,我需要合并列表,但仍然能够将过滤器应用于合并列表而不执行查询。
//This will force the next condition is executed on memory
var listCombined = listExamen.AsEnumerable().Concat(listExploracion);
那可能吗?
我会尝试在 linq 查询中将您的数据选择为匿名类型,执行联合并添加您的条件。
var listExamen = context.Examen
.Select(x => new { x.Prop1, x.Prop2, ... }); // Add properties
var listExploracion = context.Exploraction
.Select(x => new { x.Prop1, x.Prop2, ... }); // Add identical properties
var listCombined = listExamen.Concat(listExploracion);
var whereAdded = listCombines
.Where(x => x.Prop1 == someValue);
var result = whereAdded
.Skip(skipCount)
.Take(takeCount)
.ToList();
注意:我不知道是否可以将公共表表达式(跳过/获取的 SQL 必需项)与联合查询结合使用
注意:我已经更改了用于创建表达式的方法,因为我不知道您的方法(Project
, To
)
所以我认为解决方案不是转换为特定类型,而是转换为匿名类型,因为这可能可以转换为 SQL。
警告:没有测试过
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)