2010-01-20 24 views
1

我的數據庫中有一個字段是varchar(1)。我不允許改變它。此字段的值只有0或1。涉及varchar(1)字段的Linq過濾器問題

這裏是LINQ查詢的where子句:

where 
g.id_Group == idGroup && 
a.AccountOpen.Value == '1' 

我LINQ查詢生成以下SQL WHERE子句

WHERE ([t1].[id_Group] = 1234) AND (UNICODE([t0].[AccountOpen]) = '1') 

「AccountOpen '是varchar(1)字段。

我改變where子句此手動

WHERE ([t1].[id_Group] = 1234) AND ([t0].[AccountOpen] = '1') 

第二查詢返回的數據的行和所述第一一個沒有。我如何在不更改數據庫模式的情況下工作?

+0

varchar(1)?開發這個數據庫的人是否知道varchar是什麼? – Will 2010-01-20 21:06:17

回答

2

VS2008 L2S設計器錯誤地將varchar(1)和nvarchar(1)映射到System.Char。 (請參見http://social.msdn.microsoft.com/Forums/en/linqtosql/thread/ac91e587-6e91-454c-9fa2-bab20b7a258c

您可以更改L2S設計器[n] varchar(1)列的映射,以便將其映射到字符串。這樣你可以進行正常的字符串比較,並且在實現包含空[n] varchar(1)的記錄時也不會出現異常。

+0

我有一個char(1)類似的問題,其中char是'c','h'或'p',當它執行查詢時它具有相同的unicode問題,將L2S中的映射更改爲字符串,並且所有很好。乾杯 – 2011-10-06 06:16:37

1

您是否嘗試過使用string而不是char進行比較?

where 
g.id_Group == idGroup && 
a.AccountOpen.Value == "1" 
+0

文檔提示CHAR被映射到字符串,而NCHAR被映射到char。我會試試這個。 – Will 2010-01-20 21:19:23

+0

它被映射到字符。與字符串引發比較編譯時錯誤 – KClough 2010-01-20 21:24:56

+0

如果向'a.AccountOpen.Value'添加'.ToString()',還會出現編譯時錯誤嗎? – jball 2010-01-20 21:29:32

0

這是因爲UNICODE()函數:

返回整數值,作爲由Unicode標準定義 ,對於第一 字符輸入表達式的

所以如果AccountOpen字段包含值「1」,則UNICODE()值爲49 ...因此它不符合搜索條件(49 <>'1')