如何解决实体框架核心2.1:无法翻译,将在本地进行评估
一个简单的查询:
(from user in _db.Users
select new UserObj
{
DisplayName = user.LastName + " " + user.FirstName
}).OrderBy(o => o.DisplayName)
.Where(w => w.EndDate == null)
.ToList();
模型类是:
public class UserObj
{
public string FirstName {get; set;}
public string LastName {get; set;}
public string DisplayName {get; set;}
public DateTime? EndDate {get; set;}
}
但是我得到警告
警告:Microsoft.EntityFrameworkCore.Query [20500] LINQ表达式'where(new UserObj(){DisplayName =(([[user] .LastName +“” + [user.FirstName)}。EndDate == null)'无法翻译,将在本地进行评估。
解决方法
语句的顺序很重要。 EF Core将在最后一个select语句中仅允许不可翻译的表达式(*),例如字符串连接。
所以
- 要么重新组织代码,以使select语句排在最后(
ToList()
之前) - 或在数据库中添加等于
DisplayName
的计算列LastName + ' ' + FirstName
,并在自定义DTO对象中查询此列。
(*) EF Core尚不能将其转换为针对不同数据提供者的类似服务器端语句的内容
,感谢@NetMage的评论。 EndDate应该被初始化。添加它,错误消失了。
(from user in _db.Users
select new UserObj
{
DisplayName = user.LastName + " " + user.FirstName,EndDate = user.EndDate
}).OrderBy(o => o.DisplayName)
.Where(w => w.EndDate == null)
.ToList();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。