当使用Include,Orderby
和AutoMapper的ProjectTo<T>
子句组合的LINQ表达式时,Asp.net MVC Core 2.2 App崩溃。以下是该应用程序引发的异常:
无法将类型为“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表达式
显然,表达的顺序最重要,我的工作没有错误@Lucian Bargaoanu,感谢link到automapper文档。始终使用ProjectTo<T>
然后使用LINQ
表达式开始投影。
recordList = await db.SchoolProfile
.ProjectTo<SchoolProfileViewModel>(mapper.ConfigurationProvider)
.OrderBy(o => o.SchoolName)
.ToListAsync();