【问题标题】:My query is not working at all and throwing error我的查询根本不起作用并抛出错误
【发布时间】:2021-09-19 16:25:05
【问题描述】:

我正在尝试使用 fluent API 来包含另一个表,但想从父表引用一些键到父表,但是当我重新加载页面时会引发一些错误。

这是我的查询。

var allocations = _context.TblCourseAllocations
                
                .Include(ca => ca.Department)
                .Include(ca => ca.Department.TblCourses)
                .Include(ca => ca.Department.TblPrograms)
                .Include(ca => ca.Department.TblSemesters.Where(s => s.ProgramCode.Equals(ca.ProgramCode)))
                .Where(ca => ca.EmployeeCode.Equals(employee.EmployeeCode) 
                             & ca.SemesterName.Equals(semester) 
                             & ca.PaymentStatus.Equals("Regular/Unpaid")
                )
                .AsSplitQuery()
               .AsEnumerable().OrderBy(d => d.ProgramSession).GroupBy(ca => ca.CourseCode).ToList();

在 tblSemesters 上,我的条件不起作用,但我想实现多个条件。任何帮助或意见将不胜感激。

错误:

处理请求时发生未处理的异常。

InvalidOperationException:LINQ 表达式 'DbSet() .Where(t3 => EF.Property(EntityShaperExpression: EntityType: TblDepartment ValueBufferExpression:ProjectionBindingExpression: 内部 IsNullable: True , "DepartmentCode") != null && object.Equals( objA:EF.Property(EntityShaperExpression:EntityType: TblDepartment ValueBufferExpression:ProjectionBindingExpression: 内部 IsNullable: True , "DepartmentCode"), objB: EF.Property(t3, "DepartmentCode"))) .Where(t3 => t3.ProgramCode.Equals(ca.ProgramCode))' 无法翻译。 要么以可翻译的形式重写查询,要么切换 通过插入对“AsEnumerable”的调用来明确地进行客户评估, “AsAsyncEnumerable”、“ToList”或“ToListAsync”。看 https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。

提前致谢

【问题讨论】:

  • 至少您可以准确地告诉我们这些错误是什么。
  • 如果您可以发布错误,那将很容易帮助您
  • justpaste.it/3gyw1 @Darshani 请检查我的错误
  • edit您的问题并添加错误作为文本。问题的基本部分应包含在问题本身中。此外,它通常还有助于包含类和映射代码(如果存在)以及确切的 EF 核心版本(我猜是 5,因为过滤了 Include)。
  • 嗨@MalikHamzaYounas,你能分享相关的表定义,以便我们更容易重现问题并帮助你解决它吗?

标签: c# asp.net asp.net-mvc asp.net-core entity-framework-core


【解决方案1】:

您不能在 EF Core 3.x 上使用 where 子句来包含,如下行所示:

.Include(ca => ca.Department.TblSemesters.Where(s => s.ProgramCode.Equals(ca.ProgramCode)))

您没有输入您正在使用的 EF Core 版本,但我认为这是实际问题。此功能仅在 EF Core 5 上添加。见:https://docs.microsoft.com/en-us/ef/core/querying/related-data/eager#filtered-include

【讨论】:

  • 这不起作用,因为 CourseAllocation 包含 Department 的外键,然后它链接到 tblsemesters,我想从 courseallocation 表调整到 tblsemesters
  • 它不起作用,因为 ef core 3.x 不支持 Where on Include 子句.....
猜你喜欢
  • 1970-01-01
  • 2015-11-02
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2022-08-06
  • 2015-03-04
相关资源
最近更新 更多