当我使用OrderBy属性时,Linq表达式失败.Length或混合Include,OrderBy和AutoMapper ProjectTo 条款

问题描述 投票:1回答:1

当使用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表达式

asp.net-core entity-framework-core ef-core-2.2 automapper-collections-ef-core
1个回答
0
投票

显然,表达的顺序最重要,我的工作没有错误@Lucian Bargaoanu,感谢link到automapper文档。始终使用ProjectTo<T>然后使用LINQ表达式开始投影。

recordList = await db.SchoolProfile
                    .ProjectTo<SchoolProfileViewModel>(mapper.ConfigurationProvider)
                    .OrderBy(o => o.SchoolName)
                    .ToListAsync();
© www.soinside.com 2019 - 2024. All rights reserved.