【发布时间】:2021-11-06 12:32:08
【问题描述】:
所以我要做的是编写代码,根据我必须向区议会提交许可证的数据来选择合适的人员。此代码与我的实际代码库混淆,因此请耐心等待学生/班级示例。
逻辑应该说,如果没有老师在场,或者老师没有执照,则使用州立学校董事执照。如果我们找不到,请使用国家/地区。
当我从查询中排除状态主管时,回退工作正常,它运行没有问题。但是,当我尝试包含此内容时,它会引发“System.InvalidOperationException”。我已验证所有学生都有当前地址,并且字典中存在适当的状态。
看起来我当前在 iqueryable 中使用字典的语法无效,并且 EF 不知道如何使用字典!
var qry = from student in FilteredContext // type is IQueryable<Student>
let studentsAddress = student.Addresses.FirstOrDefault(x=>x.IsCurrent)
let instructor = lastClass == null ? : lastClass.Instructor
let stateSchoolDirector = _personnelContext.Context.FirstOrDefault(x=>x.ID == SchoolDirectors.ByState[currentAddress.State])
let nationalSchoolDirector = _personnelContext.Context.FirstOrDefault(x => x.ID == SchoolDirectors.NationalSchoolDirector)
let personnelForLicense = instructor ?? stateSchoolDirector ?? national
select personnelForLicense.License;
var results = qry.ToList();
所以我的问题是,有没有办法在 iqueryable 中表示字典或类似的东西?如果没有,是否有任何合理的解决方法?我完全被困在这里,尽管在 StackOverflow 或谷歌搜索结果中无法轻易找到类似的东西。我能找到的最接近的建议是告诉我转换为 .AsEnumerable() ,但我看不到它如何与我的 let 语句一起使用
【问题讨论】:
-
这里没有字典。是的,查询可以重写为可翻译的,但它太模糊了,我无法理解所有关系。
lastClass从它出现的地方。stateSchoolDirector、stateSchoolDirector、national也不是。可见分析。 -
澄清一下,字典是 Dictionary ByState[currentAddress.State]。很抱歉造成混淆,但它是一个 key->string value->guid 的字典,其中 guid 是人事记录上的主键
-
我在我的代码中发现了一个错误,除了我发布的关于字典查找的内容。由于 Instructor 是一条记录,因此对象实体框架无法将 null 与实例合并。它只能用类似 SQL 的对象进行翻译。我正在更新我的代码以忽略 null coalese,并直接为人员调用 stateSchoolDirector。但是,由于字典查找,它仍然与 InvalidOperation 出错
-
哈我不能!!!好吧,如果我能改变它,它会读到这个……让personalForLicense = /*instructor ??*/ stateSchoolDirector /*?? national*/ 这段代码显然不正确,但它与我试图解决的问题隔离开来。我可以通过使用三元空值检查来绕过空值合并,尽管它更难读
标签: c# entity-framework-core iqueryable