2010-01-20 61 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')