2013-02-08 82 views
1

我有一个LINQ查询LINQ的空字符串与空间

var x = c from context.customers 
where c.Name == '' 

var x = c from context.customers 
where c.Name == ' ' 

我在SQL 2008数据库中的客户名称列,用VARCHAR(50)和一个客户是空白,其他有一个空间,但由Linq生成的TSQL是正确的,但两个查询的返回都会返回两个客户,而不是我想要的1个记录,这个记录可以是空白的,也可以是空白的。根据这个问题,我知道底层问题是SQL服务器问题。

SQL Server 2008 Empty String Vs Space

我想修改我的Linq查询。我怎样才能做到这一点?而无需在linq中使用SQL Server T-SQL命令。

回答

2

如果您使用的是实体框架,然后利用SqlFunctions.DataLength来区分空字符串和空格。

e.g

var x = c from context.customers 
where c.Name == '' && SqlFunctions.DataLength(c.Name) == 0 

var x = c from context.customers 
where c.Name == '' && SqlFunctions.DataLength(c.Name) != 0 

SqlFunctions.DataLength翻译为TSQL DATALENGTH功能。 DATALENGTH会给你一个字符串需要的字节数,包括任何空格。相比之下,LEN功能会在修剪任何尾随空白处后为您提供字符数。