我正在使用EF core 3.1,并且我有一个Order实体,我想通过此代码获取报告:
public async Task<List<OrderReport>> GetOrderReportAsync(DateTimeOffset @from, DateTimeOffset to,
OrderStatus? status, CancellationToken token)
{
var query = _dbContext.Orders.AsNoTracking()
.Where(x => x.StartAt >= from && x.StartAt <= to);
if (status.HasValue)
query = query.Where(x => x.Status == status);
return await query
.Select(x => new
{
x.StartAt,
x.Status,
TotalPrice = Convert.ToInt64(x.TotalPrice),
PayedPrice = Convert.ToInt64(x.PayedPrice),
})
.GroupBy(x => new
{
x.Status,
x.StartAt.Date
})
.Select(x => new OrderReport()
{
DateTime = x.Key.Date,
Timestamp = x.Key.Date.Ticks,
Total = x.Count(),
TotalPrice = x.Sum(s => s.TotalPrice),
TotalPayedPrice = x.Sum(s => s.PayedPrice),
Status = x.Key.Status
}).ToListAsync(token);
}
但是在运行时EF抛出异常:
LINQ表达式'(ProjectionBindingExpression:1)'无法翻译。可以以可翻译的形式重写查询,也可以通过插入对AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()的调用来显式切换到客户端评估。
我知道异常在说什么,但不想在内存中获取所有记录,然后再设置分组依据-我之前在EF 2.1上运行过相同的代码,并且没有例外。
我的代码有问题吗?