1

統合言語クエリがあります

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

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

SQL 2008データベースにvarchar(50)のcustomername列があり、1つの顧客が空白で、もう1つの顧客にスペースがありますが、Linqによって生成されたTSQLは正しいですが、両方のクエリに対して返されると、両方の顧客が返され、必要な1つのレコードは返されません。これは空白であるか、空白があります。この質問によると、根本的な問題はSQLサーバーの問題であることを私は知っています。

SQLServer2008の空の文字列とスペース

Linqクエリを変更したい。これどうやってするの?linqでSQLサーバーのT-SQLコマンドを使用せずに。

4

1 に答える 1

2

Entity Frameworkを使用している場合は、SqlFunctions.DataLengthを使用して、空の文字列と空白を区別します。

例えば

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は、TSQLDATALENGTH関数に変換されます。DATALENGTHは、空白を含め、文字列に必要なバイト数を示します。比較すると、LEN関数は、末尾の空白を削除した後の文字数を示します。

于 2013-02-08T12:34:33.177 に答える