EF Core 3.1无法翻译linq查询

时间:2020-09-30 22:20:02

标签: c# ef-core-3.1

我正在使用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上运行过相同的代码,并且没有例外。

我的代码有问题吗?

0 个答案:

没有答案