2013-02-08 56 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功能會在修剪任何尾隨空白處後爲您提供字符數。