我的数据库中有一个varchar(1)字段。我不允许改变它。该字段的唯一值为0或1.
这是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 :(得分: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)s的记录时也不会出现异常。
答案 1 :(得分:1)
您是否尝试使用string
代替char
进行比较?
where
g.id_Group == idGroup &&
a.AccountOpen.Value == "1"
答案 2 :(得分:0)
这是因为UNICODE()函数:
返回定义的整数值 按照Unicode标准,第一个 输入表达式的字符
因此,如果AccountOpen字段包含值“1”,则其UNICODE()值为49 ...因此它不满足搜索条件(49<>'1')