2013-02-11 46 views
0

我正在從MySQL轉換到Postgres,並且一些linq查詢會導致異常。具體來說,我在添加按位運算符比較的查詢中遇到問題。我注意到SQL字符串中的參數似乎是位置(?)而不是命名(:p1,:p2,:p3)。NHibernate + Npqsql + LINQ給出「在查詢中找不到參數p1」

任何想法,爲什麼?以下是例外情況的一部分:

select column1_39_,grant0 _。\「Version \」作爲column2_39_,.... 和(grant0 _。\「IsPublic \」= TRUE或(grant0_ 。\「UserId \」不爲空)和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團隊提交一個補丁。

+0

從Npgsql.NpgsqlCommand.ReplaceParameterValue()拋出異常,所以我不認爲它正在使它到數據庫。 – LogicMan 2013-02-11 20:53:01

+0

在ReplaceParameterValue中的Npgsql驅動程序中,我看到了這個正則表達式'「[ - | \ n \ r \ t,)(; = +/<>] [:| @]」+ parameterMarker + parameterName +「([ - |這是否需要包含按位運算符? – LogicMan 2013-02-11 22:23:20

+0

@LogicMan如果你自己找到答案,你應該在下面作爲答案發布它,然後將它標記爲已接受的答案(延遲幾天後才能讓你) – 2013-02-12 08:19:47

回答

1

我希望這不是壞的形式回答我的問題,但問題是,駕駛員Npgsql的2.0.12不正確替換參數時,他們遵循的是「&」的象徵。當您使用整數作爲位域時會發生這種情況。以下是Linq:

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

我會向Npgsql團隊提交一個補丁。