You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改EF Core查询以添加int[]数组类型转换(PostgreSQL)

问题:EF Core查询PostgreSQL JSONB版本号按整数排序

我正在使用Entity Framework (EF) Core和PostgreSQL,目标表中有一个JSONB列,其中存储了版本号。需要按该版本号按整数规则排序查询结果,但当前EF Core生成的SQL缺少关键的类型转换,导致无法按整数逻辑排序。

目标PostgreSQL查询(需生成的SQL):

ORDER BY 
    string_to_array("Metadata"->>'version', '.')::int[]

当前EF Core查询代码:

query.OrderBy(_ => EF.Functions.StringToArray(_.UserMetadata!.RootElement.GetProperty("version").GetString()!, "."))

生成的PostgreSQL查询(缺少类型转换):

ORDER BY 
    string_to_array("Metadata"->>'version', '.')

解决方案

要让EF Core生成带::int[]类型转换的SQL,有两种可靠的实现方式:

方法1:使用EF.Functions.Cast显式转换

利用EF Core提供的Cast函数,将字符串数组结果强制转换为整数数组:

query.OrderBy(_ => EF.Functions.Cast<int[]>(
    EF.Functions.StringToArray(_.UserMetadata!.RootElement.GetProperty("version").GetString()!, ".")
))

这种方式会让EF Core自动生成::int[]的类型转换语句,和目标SQL完全一致。

方法2:注入原生SQL片段

如果Cast函数在你的EF Core版本中不生效,可以直接通过SqlQuery注入原生SQL逻辑:

query.OrderBy(_ => EF.Functions.SqlQuery<int[]>(
    "string_to_array({0}->>'version', '.')::int[]", _.UserMetadata
))

这种方式直接指定原生SQL表达式,确保生成的语句完全符合需求。


内容的提问来源于stack exchange,提问作者Masoomian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:22:37