EF Core 3 Linq无法翻译

sgt_S2

我试图在ef core 3.0中建立一个查询,该查询从db服务器获取完整过程

 IEnumerable<int> stIds = stateIds;
  var rtables = await db.Order.
                Join(db.OrderDetail, order => order.OrderId, orderdetail => orderdetail.OrderId, (order, orderdetail) => new { order, orderdetail }).
                Where(x => x.order.SellerId == sellerId && stIds.Contains(x.orderdetail.OrderStateId)&&x.order.RtableId != null)
                .GroupBy(x =>             
                x.order.RtableId               
                )
                .Select(x => new RtableState { RtableId = x.Key ?? 0, OrderStateId = x.OrderByDescending(x => x.orderdetail.OrderStateId).Select(x => x.orderdetail.OrderStateId).FirstOrDefault() }).ToListAsync();

我收到此错误:

{“ Message”:“处理LINQ表达式'AsQueryable <<> f__AnonymousType52>(OrderByDescending <<> f__AnonymousType52,int>(\ r \ n源:NavigationTreeExpression \ r \ n值:默认值(IGrouping,<> f__AnonymousType52>) \ r \ n表达式:(未处理的参数:e),\ r \ n keySelector:(x)=> x.orderdetail.OrderStateId)),由'NavigationExpandingExpressionVisitor'失败。这可能表示EF Core中存在错误或限制请参阅https://go.microsoft.com/fwlink/?linkid=2101433,以获取更多详细信息。“,”内部“:”“}

我知道查询对于EF Core 3.0来说太复杂了,但这是一个错误还是应该解决?

我的解决方案是拆分请求。

IEnumerable<int> stIds = stateIds;
            var rtableStatesServer = await db.Order.
                Join(db.OrderDetail, order => order.OrderId, orderdetail => orderdetail.OrderId, (order, orderdetail) => new { order, orderdetail }).
                Where(x => x.order.SellerId == sellerId && stIds.Contains(x.orderdetail.OrderStateId) && x.order.RtableId != null)
                .GroupBy(x => new RtableState
                {
                    RtableId =

                x.order.RtableId ?? 0,
                    OrderStateId = x.orderdetail.OrderStateId
                })
                .Select(x => new RtableState { RtableId = x.Key.RtableId, OrderStateId = x.Key.OrderStateId }).ToListAsync();


            var rtableStates = rtableStatesServer.GroupBy(r => r.RtableId,
                        (key, value) => new RtableState
                        {
                            RtableId = key,
                            OrderStateId = value.OrderByDescending(x=>x.OrderStateId).Select(x => x.OrderStateId).FirstOrDefault()
                        }).ToList();

伊万·斯托夫

如异常消息中所示,问题是由表达式引起的

x.OrderByDescending(y => y.orderdetail.OrderStateId)
    .Select(y => y.orderdetail.OrderStateId)
    .FirstOrDefault()

其中xIGrouping<,>通过产生GroupBy操作者。

这可能表示EF Core中存在错误或限制。

我认为这是一个局限性,因为GroupBy包含键和聚合表达式以外的表达式的结果没有自然的SQL等效项,因此它可能永远无法解决。

一般的解决方案是尽可能避免GroupBy使用具有相关子查询的替代构造。但是此特定查询具有简单的自然解决方案,因为表达式

set.OrderByDescending(item => item.Property).Select(item => itm.Property).FirstOfDefault() 

可以用

set.Max(item => item.Property)

这是一个标准(因此受支持的汇总)。

将上述问题表达式替换为

x.Max(y => y.orderdetail.OrderStateId)

问题就会解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF Core 3 Casting无法翻译

来自分类Dev

EF Core 3.x-具有Include的简单LINQ无法翻译,客户端评估

来自分类Dev

EF Core Linq表达式无法翻译

来自分类Dev

EF Core 无法翻译简单的 where linq 表达式

来自分类Dev

EF Core 3.1.x:无法翻译LINQ表达式。以一种可以翻译的形式重写查询

来自分类Dev

LINQ表达式无法翻译(EF Core中的深度查询)

来自分类Dev

EF Core ValueObject比较无法翻译,将在本地进行评估

来自分类Dev

从 EF Core 2 迁移到 EF Core 3

来自分类Dev

EF Core 2.1 Linq查询到EF Core 3.0

来自分类Dev

无法使用 EF Core 迁移

来自分类Dev

EF Core 3中使用linq查询进行外部联接不起作用

来自分类Dev

在EF Core 3中映射json

来自分类Dev

EF Core 3 1对0关系问题

来自分类Dev

EF LINQ翻译:复杂查询

来自分类Dev

LINQ表达式无法翻译-Entity Framework Core

来自分类Dev

EF Core Linq上的子查询总和

来自分类Dev

EF-Core LINQ JOIN 与 include()

来自分类Dev

在 Linq 查询 EF Core 中使用 Like

来自分类Dev

EF核心查询无法翻译

来自分类Dev

EF Core:无法转换LINQ表达式-Net Core 3.1

来自分类Dev

PredicateBuilder无法在EF Core上运行

来自分类Dev

无法使用EF Core 1.1创建迁移

来自分类Dev

EF Core 3.0翻译字符串。正确等于ordinalIgnoreCase

来自分类Dev

EF Core 3.1 OrderByDescending好奇的T-SQL翻译

来自分类Dev

实体框架3.0包含无法像在EF Core 2.2中一样在SQL中进行翻译

来自分类Dev

EF Core 3 GroupBy通过多列计数带有扩展名的Throws,但是linq可以工作

来自分类Dev

将列映射到EF Core 3中的子对象

来自分类Dev

如何在EF Core 3查询中解析int?

来自分类Dev

Xamarin Forms,Sqlite,EF Core 3,迁移和大量混淆

Related 相关文章

热门标签

归档