c# - 修复“无法翻译 LINQ 表达式”的规则
问题描述
我正在升级应用程序以使用 EF Core 3.1。
我得到了错误The LINQ expression could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation
。
我的代码中有大约 80 个查询。
我了解,对于每个查询,我可以:
- 翻译查询
- 使用
.AsEnumerable
//.ToList
等使查询在客户端运行
我想翻译尽可能多的查询。
是否有关于什么可以/不能翻译的规则列表?(我在想象 MSDN 上的参考指南)
目前,我的方法是通过各种方式更改查询,直到它起作用,或者我放弃并添加.AsEnumerable
.
我希望能够检查查询并确定要做什么,而不是不得不使用试错法(或者不得不在 Stack Overflow 上问 80 个问题!)
解决方案
从光明的一面看!☀
多亏了 EF Core 3.1,您发现了 80 个以前由客户端评估且速度较慢的查询。
跟踪.AsEnumerable()
所有这些并将 80 个案例添加到您的积压工作中,从 [最慢|访问最多|影响最大] 查询开始有条不紊地工作。
根据经验,大多数东西都不会翻译。将不会在此处翻译的查询作为单独的问题发布,我们很乐意帮助您进行优化。
狩猎愉快!