如何在 EFCore 中使用 postgresql 反向函数
How can I use postgresql reverse function with EFCore
我想使用 EFCore 创建一个 SQL 查询,如下所示。
FROM "Customers" AS c
where reverse("Phone") LIKE reverse('%#####');
ORDER BY 1
LIMIT @__p_2 OFFSET @__p_1
我正在尝试使用 LINQ,但此代码无法正常工作,而且我在 EF.Functions
中找不到反向方法
query = query.Where(c => c.Phone.Reverse().ToString() == $"{phone}%");
引发错误
Message": "The LINQ expression 'DbSet\r\n .Where(c
=> c.Phone\r\n .Reverse().ToString() == __Format_0)' could not be translated. Either rewrite the query in a form that can be
translated, or switch to client evaluation explicitly by inserting a
call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or
ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for
more information.
有什么方法可以使用 PostgreSQL/Npgsql 提供程序为 Entity Framework Core 创建反向函数查询。
遗憾的是,在 .NET 中没有 simple/idiomatic 表达字符串反转的方法;请注意 c.Phone.Reverse().ToString()
而不是 return 反向的 phone,因为它从 Reverse returned 上调用了 ToString。
我为即将发布的 5.0 版添加了 EF.Functions.Reverse - 请参阅 https://github.com/npgsql/efcore.pg/pull/1496。
我想使用 EFCore 创建一个 SQL 查询,如下所示。
FROM "Customers" AS c
where reverse("Phone") LIKE reverse('%#####');
ORDER BY 1
LIMIT @__p_2 OFFSET @__p_1
我正在尝试使用 LINQ,但此代码无法正常工作,而且我在 EF.Functions
query = query.Where(c => c.Phone.Reverse().ToString() == $"{phone}%");
引发错误
Message": "The LINQ expression 'DbSet\r\n .Where(c => c.Phone\r\n .Reverse().ToString() == __Format_0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
有什么方法可以使用 PostgreSQL/Npgsql 提供程序为 Entity Framework Core 创建反向函数查询。
遗憾的是,在 .NET 中没有 simple/idiomatic 表达字符串反转的方法;请注意 c.Phone.Reverse().ToString()
而不是 return 反向的 phone,因为它从 Reverse returned 上调用了 ToString。
我为即将发布的 5.0 版添加了 EF.Functions.Reverse - 请参阅 https://github.com/npgsql/efcore.pg/pull/1496。