【发布时间】:2019-03-28 08:05:18
【问题描述】:
当使用 Include、Orderby 和 AutoMapper 的 ProjectTo<T> 子句组合的 LINQ 表达式时,Asp.net MVC Core 2.2 应用程序崩溃。以下是应用程序引发的异常:
无法转换类型的对象 'System.Linq.Expressions.PropertyExpression' 键入 'Remotion.Linq.Clauses.Expressions.QuerySourceReferenceExpression'。
此 LINQ 表达式的行为是不可预测的,因为有时它会起作用,而有时它会中断。我已经尝试过 Eager 和 Lazy 加载,但仍然出现相同的错误。
recordList = await db.SchoolProfile
.Include(i => i.Category)
.Include(i => i.District)
.Include(i => i.SchoolAddress.Address)
.Include(i => i.SchoolAddress.Coordinates)
.OrderBy(o => o.Name.Length)
.ProjectTo<SchoolProfileViewModel>(mapper.ConfigurationProvider)
.ToListAsync();
即使没有Include 子句也会抛出同样的错误:
recordList = await db.CurricularActivity
.OrderBy(o => o.Activity.Length)
.ProjectTo<CurricularActivityViewModel>(mapper.ConfigurationProvider)
.ToListAsync();
删除Activity.Length 似乎可行,但为什么它会破坏代码,但相同的查询在其他地方也有效?
因此,我希望得到一些解决此问题的指导。
我非常感谢了解为什么会发生这种情况并了解如何解决这个问题,以便我可以编写更高效且无错误的 LINQ 表达式
【问题讨论】:
-
很可能是 EF Core 问题。检查the execution plan。将其作为 LINQ 语句运行,无需 AM。你应该得到相同的结果。
-
@LucianBargaoanu 感谢您的链接,执行顺序有影响,所以我将查询更改为先进行投影,然后再进行 LINQ 表达式,它按预期工作。
标签: asp.net-core entity-framework-core ef-core-2.2 automapper-collections-ef-core