【发布时间】:2020-12-01 00:52:51
【问题描述】:
在 EF 6 中,如果我想通过不同的姓氏来选择用户,我可以这样做:
var users = _context.User
.GroupBy(x => x.LastName)
.Select(x => x.FirstOrDefault())
.OrderBy(x => x.LastName)
.Take(10)
.ToList();
在 EF Core 3.1.6 中,同样的查询给了我以下异常:
System.InvalidOperationException: The LINQ expression '(GroupByShaperExpression:
KeySelector: (u.LastName),
ElementSelector:(EntityShaperExpression:
EntityType: User
ValueBufferExpression:
(ProjectionBindingExpression: EmptyProjectionMember)
IsNullable: False
)
)
.FirstOrDefault()' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync()
有没有什么方法可以在不使用 AsEnumerable(或其他替代方法)的情况下使用该查询,这会将整个巨大的表加载到内存中?我在下面使用的数据库是 Microsoft SQL Server 2014,它可以处理这种查询。
【问题讨论】:
标签: c# sql-server entity-framework entity-framework-core