从SQL表中,我正在尝试获取每个项目的最后一行。 我传递了一个用户列表(对象ID列表),想要获取他们每个人的最后一份工作。 以下是该函数。
public async Task<List<Job>> GetLastJobs(List<int> objectIds)
{
using ManagerContext context = new ManagerContext(_callContext);
List<Job> jobs = context.Jobs.Where(j => j.ObjectId.HasValue && objectIds.Contains(j.ObjectId.Value)).GroupBy(j => j.ObjectId).Select(j => j.OrderByDescending(p => p.Id).FirstOrDefault()).ToList();
return null;
}
在执行时,它返回:
the LINQ expression '(GroupByShaperExpression:
KeySelector: (j.ObjectId),
ElementSelector:(EntityShaperExpression:
EntityType: Job
ValueBufferExpression:
(ProjectionBindingExpression: EmptyProjectionMember)
IsNullable: False
)
)
.OrderByDescending(p => p.Id)' could not be translated.
要么改写查询语句使其可翻译,要么明确切换到客户端评估,插入以下任意一个调用:AsEnumerable()、AsAsyncEnumerable()、ToList()或ToListAsync()。有关更多信息,请参见https://go.microsoft.com/fwlink/?linkid=2101038。
我不知道从哪里开始解决这个问题
GroupBy
处理方面它非常受限 - 他们计划在未来版本中进行改进。你可以在GroupBy
之前加上AsEnumerable
,理解这样做会拉取所有行。(PS:你可以使用First
代替FirstOrDefault
- 不可能存在空组。) - NetMage