entity-framework-6 - IncludeFilter 多个级别不起作用
问题描述
此 IncludeFilter 存在问题并包含多个级别。我正在使用实体框架 6 Plus。
这是他们在标题下提供的示例https://entityframework-plus.net/query-include-filter 。Load multiple levels
这可行,但它返回的保修记录比我想要的要多。
db.Application.Where(x => x.ApplicationId == applicationId)
.Include(x => x.Lienholder)
.Include(x => x.Warranty.Select(y => y.Coverage.CoverageGroup))
.Include(x => x.Vehicle)
.Include(x => x.Vendor)
.First();
这有效但.Coverage
为空,但它是最接近示例的。
db.Application.Where(x => x.ApplicationId == applicationId)
.Include(x => x.Lienholder)
.IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
)
.IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
).Select(y => y.Coverage.CoverageGroup))
.Include(x => x.Vehicle)
.Include(x => x.Vendor)
.First();
这根本不起作用,因为显然IncludeFilter
你必须包含一个 where 子句
db.Application.Where(x => x.ApplicationId == applicationId)
.Include(x => x.Lienholder)
.IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
).Select(y => y.Coverage.CoverageGroup))
.Include(x => x.Vehicle)
.Include(x => x.Vendor)
.First();
这一个有效,但它并不急于加载 Coverage
db.Application.Where(x => x.ApplicationId == applicationId)
.Include(x => x.Lienholder)
.IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
)
.Include(x => x.Vehicle)
.Include(x => x.Vendor)
.First();
解决方案
- 您不能
Include
与IncludeFilter
or混合使用IncludeOptimized
。 - 您需要将每条路径包含在他自己的
IncludeFilter
在您最接近的示例中,您错过了包含“Y.Coverage”
这些是目前图书馆的限制。
这是您要查找的内容:
db.Application.Where(x => x.ApplicationId == applicationId)
.IncludeFilter(x => x.Lienholder)
.IncludeFilter(x => x.Warranty.Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
))
.IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
).Select(y => y.Coverage))
.IncludeFilter(x => x.Warranty.Where(z => true).Where(z =>
z.WarrantyStatusId == 2 ||
z.WarrantyStatusId == 3 ||
z.WarrantyStatusId == 8 ||
z.WarrantyStatusId == 10
).Select(y => y.Coverage.CoverageGroup)))
.IncludeFilter(x => x.Vehicle)
.IncludeFilter(x => x.Vendor)
.First();
这根本不起作用,因为显然使用 IncludeFilter 您必须包含 where 子句
不,你没有。
推荐阅读
- matlab - 在matlab / octave中将带有变量的符号向量分离为基向量和标量
- android - 任务“:app:processPromoGoogleServices”执行失败。> 找不到与包名称匹配的客户端,即使所有文件夹和名称都匹配
- java - Spring Cloud Config Server - 刷新键的空数组
- frama-c - Eva 计算区间的方法 [frama-c]
- bash - 如何使用 Bash 删除不需要的文件/文件夹
- javascript - Python Selenium WebDriver 卡在下拉菜单中并且没有选择
- java - 使用构造函数自动装配的实例为空
- count - 如何计算 CUDA 中的指令数?(或每周期指令)
- javascript - 为数据提供者和数据上下文使用 React Hooks
- c++ - (BST) 错误:未找到匹配的重载函数