我在EF 6中使用了以下的EF Core Linq查询,其中PK是一个Guid,并且它运行正常。
var partialSCs = repository.MyClass
.Where(x => x.PK.CompareTo(pk) > 0))
.OrderBy(x => x.PK)
.Take(10);
EF Linq查询成功转换为SQL查询。
然后我们切换到EF Core 7,现在我遇到了这个错误:
: 'LINQ表达式'DbSet() .Where(s.PK.CompareTo((object)__pk_2) > 0)' 无法翻译。附加信息:方法'System.Guid.CompareTo'的翻译失败。 如果此方法可以映射到您的自定义函数,请参阅https://go.microsoft.com/fwlink/?linkid=2132413获取更多信息。 要么将查询重写为可以翻译的形式,要么显式地切换到客户端评估,通过插入调用'AsEnumerable'、'AsAsyncEnumerable'、'ToList'或'ToToListAsync'。请参阅https://go.microsoft.com/fwlink/?linkid=2101038获取更多信息。
我已经阅读了以下文章:
Entity Framework Core: Guid Greater Than for Paging
他们说的是CompareTo
必须起作用。但在我的情况下并没有。
.Where(x => x.PK > pk)
呢? - CharliefaceGuid
类型不像其他类型一样提供比较运算符(同样适用于string
)。在重复目标中提供了解决方法。 - Ivan StoevGuid.CompareTo(Guid)
的翻译。而你遇到的是Guid.CompareTo(object)
的重载(没有Guid?
的重载),这是正常无法翻译的。实际上,错误消息中已经显示了(这里的object
转换s.PK.CompareTo((object)__pk_2) > 0
),一开始没有注意到。重新打开,这样你就可以为未来的读者发布一个自我回答。 - Ivan Stoev