0

我正在从 MySQL 转换为 Postgres,一些 linq 查询会导致异常。具体来说,我在添加按位运算符比较的查询中遇到问题。我注意到 SQL 字符串中的参数似乎是位置 (?) 而不是命名 (:p1, :p2, :p3)。

知道为什么吗?这是异常的一部分:

选择grant0_.\"Id\" 作为column1_39_,grant0_.\"Version\" 作为column2_39_, .... and (grant0_.\"IsPublic\"=TRUE or (grant0_.\"UserId\" is not null) and grant0_.\"UserId\"=?) 和 grant0_.\"PermissionFlags\"&?=?

名称:p1 - 值:9011 名称:p2 - 值:4 名称:p3 - 值:4

编辑:

我在 NpqsqlCommand.ReplaceParameterValue() 函数中看到了这一点——它可能需要包含更多运算符。我正在试验那个。

String pattern = "[- |\n\r\t,)(;=+/<>][:|@]" + parameterMarker + parameterName + "([- |\n\r\t,)(;=+/<>]|$)";

回答:我希望回答我自己的问题的形式还不错,但问题是 Npgsql 驱动程序 2.0.12 没有正确替换参数后跟 '&' 符号。当您使用整数作为位字段时会发生这种情况。下面是Linq:

Where(g => (g.flag & flag) == flag)

我将向 Npgsql 团队提交补丁。

4

1 回答 1

1

我希望回答我自己的问题不是不好的形式,但问题是 Npgsql 驱动程序 2.0.12 在参数跟随“&”符号时没有正确替换参数。当您使用整数作为位字段时会发生这种情况。下面是Linq:

Where(g => (g.flag & flag) == flag)

我将向 Npgsql 团队提交补丁。

于 2013-02-12T17:26:54.030 回答