Entityframework Core 3 linq表达式无法翻译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Entityframework Core 3 linq表达式无法翻译相关的知识,希望对你有一定的参考价值。

我刚刚升级到EF 3,并且我曾经使用的查询之一现在提供了例外

   ProductionRecords = _context.ProductionRecords
          .Where(r => r.DataCriacao.Date == DateTime.Now.Date)
            .Select(pr => new ProductionRecordViewModel
            
                Id = pr.Id,
                Operador = pr.Operador,
                DataCriacao = pr.DataCriacao,
                Celula = pr.Celula.Name,
                Turno = pr.Turno.Name,
                TotalPecasSemDefeito = pr.ReferenceRecords.Sum(c => c.Quantity),
                TotalPecasComDefeito = pr.DefectRecords.Sum(c => c.Quantidade),
                TotalTempoParado = pr.StopRecords pr.StopRecords.Sum(c => Convert.ToInt32(c.Duration.TotalMinutes)),
            )
          .AsNoTracking()
          .ToList();

当我尝试将集合与时间跨度和持续时间相加时发生例外。...

我现在应该如何处理?

这里是例外

InvalidOperationException:LINQ表达式'(EntityShaperExpression:EntityType:StopRecordValueBufferExpression:(ProjectionBindingExpression:EmptyProjectionMember)IsNullable:False).Duration.TotalMinutes'无法翻译。可以使用以下形式重写查询:进行翻译,或通过插入来明确切换到客户评估调用AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()。参见https://go.microsoft.com/fwlink/?linkid=2101038更多信息。

答案

[EF3中发生了重大变化,除非在查询链的最后(您的Convert.ToInt32(c.Duration.TotalMinutes)可能依赖于此),否则EF3不会自动恢复为客户端评估。

以上是关于Entityframework Core 3 linq表达式无法翻译的主要内容,如果未能解决你的问题,请参考以下文章

使用 EntityFramework.Core 从自引用表加载完整的层次结构

从零开始学 ASP.NET Core 与 EntityFramework Core 目录

EntityFramework Core 中的映射继承

带有标识 2 和 EntityFramework 6(Oracle)的 ASP.NET Core MVC

EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

.Net Core005EntityFramework的使用