Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此方法的重载';System.Linq.Queryable.TakeLast';当前不支持_Linq_Asp.net Core_Entity Framework Core - Fatal编程技术网

此方法的重载';System.Linq.Queryable.TakeLast';当前不支持

此方法的重载';System.Linq.Queryable.TakeLast';当前不支持,linq,asp.net-core,entity-framework-core,Linq,Asp.net Core,Entity Framework Core,我有一个使用实体框架核心的ASP.NETCore2.2WebAPI。 它使用最新版本的Pomelo连接到MySQL数据库。 当我尝试执行Linq函数“TakeLast”时,如下所示: var messages = dbContext.Messages .TakeLast(5) .ToList(); 我得到这个错误: 引发异常:Remotion.Linq.dll中的“System.NotSupportedExceptio

我有一个使用实体框架核心的ASP.NETCore2.2WebAPI。 它使用最新版本的Pomelo连接到MySQL数据库。 当我尝试执行Linq函数“TakeLast”时,如下所示:

var messages = dbContext.Messages
                   .TakeLast(5)
                   .ToList();
我得到这个错误:

引发异常:Remotion.Linq.dll中的“System.NotSupportedException”

System.NotSupportedException:无法分析表达式值(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[PropWorx.API.Models.Message])。TakeLast(u p_0):“System.Linq.Queryable.TakeLast”方法的此重载当前不受支持

Ling函数“Take”起作用,但“TakeLast”不起作用。这是MySql的一个限制吗?还是柚子?有解决办法吗


谢谢

每个提供商都负责实现适用于其特定平台的LINQ表达式翻译。是的,Pomelo似乎没有为TakeLast提供支持

就解决办法而言,有两件事。首先,在没有ORDERBY子句的情况下,绝不能使用
Skip
/
Take
。默认顺序将是主键,但取决于键的类型,这可能最终几乎完全是随机的。最好明确地说明顺序,这样您就可以确切地了解从结果中得到了什么

其次,假设您有一个排序,要获得
TakeLast
功能,只需反转排序并使用
Take
。例如,假设您正在按创建日期提取消息:

var messages = dbContext.Messages.OrderBy(o => o.Created).TakeLast(5).ToList();
您在这里真正想说的是,您想要的是具有最新创建日期的,因此您可以执行以下操作:

var messages = dbContext.Messages.OrderByDescending(o => o.Created).Take(5).ToList();

达到同样的效果。

完美!与一些可枚举实现相比,循环缓冲区和类似的疯狂东西的性能要好得多。对于非常大的结果集(比如8000万个结果集),这里的性能影响是什么?我从来没有一个清晰的概述。一次拉8000万张唱片是不会有任何效果的,不管怎样。但是,如果您订购的列被索引,性能将尽可能好。