5

と思いましたが"bill" + "john" + null == billjohn、私のこの例では、null に評価されているようです:

 var clients = from client in taxPortalService.Client()
                          select new ClientViewModel
                              {                               
                                  ResidentialAddressLine1 = client.RESADDRESSLINE1,
                                  ResidentialAddressLine2 = client.RESADDRESSLINE2,
                                  ResidentialAddressLine3 = client.RESADDRESSLINE3,
                                  ResidentialAddressLine4 = client.RESADDRESSLINE4,
                                  ResidentialPostalCode = client.RESPOSTCODE,
                                  ResidentialCountry = client.RESCOUNTRY,
                                  IAResidentialAddress = client.RESADDRESSLINE1 + ", " + client.RESADDRESSLINE2 + ", " + client.RESADDRESSLINE3 + ", " + client.RESADDRESSLINE4 + ", " + client.RESPOSTCODE + ", " + client.RESCOUNTRY                               
                              };

ここで明らかな何かが欠けていますか?

ここに画像の説明を入力

4

3 に答える 3

8

これは、バックエンドとしてLINQ-to-SQLまたはEFを使用しており、SQLを生成していると思います。TSQLでは、null何かと連結されたものは(デフォルトで)次のようになりnullます。おそらく試してみてください:

(row.Foo ?? "") + ", " + (row.Bar ?? "") + ...

または簡単:最初にデータを値としてメモリに取り込み、次に合成を行います。

于 2012-12-13T13:21:56.560 に答える
7

C#では、あるいは.NETでは、あなたは正しいです、あなたに"bill" + "john" + null与えます"billjohn"

SQLでは、'bill' + 'john' + nullを与えますnull

LINQ to Entitiesを使用すると、C#がSQLに変換され、このような微妙な違いが常に保持されるとは限りません。

より冗長なものを使用できます

(client.RESADDRESSLINE1 ?? "") + ", " + (client.RESADDRESSLINE2 ?? "") + ", " + ...

null以外の文字列のみを連結するようにします。これにより、この問題は発生しません。

于 2012-12-13T13:22:58.320 に答える
3

SQL-Server を rdbms と仮定すると、簡単なテストで次のことがわかります。

select 'A' + NULL;  // NULL

デモ

MSDN

+ (文字列連結) 演算子は、空の長さ 0 の文字列を処理する場合と、NULL または不明な値を処理する場合とで動作が異なります。長さ 0 の文字列は、引用符内に文字を入れずに 2 つの単一引用符として指定できます。長さゼロのバイナリ文字列は、16 進定数でバイト値を指定せずに 0x として指定できます。長さ 0 の文字列を連結すると、指定された 2 つの文字列が常に連結されます。null 値を持つ文字列を操作する場合、連結の結果はセッションの設定によって異なります。null 値に対して実行される算術演算と同様に、null 値が既知の値に追加されると、通常、結果は不明な値になります。null 値で実行される文字列連結操作も null の結果を生成する必要があります。ただし、現在のセッションの CONCAT_NULL_YIELDS_NULL の設定を変更することで、この動作を変更できます。詳細については、「SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)」を参照してください。文字列の連結の結果が 8,000 バイトの制限を超える場合、結果は切り捨てられます。ただし、連結された文字列の少なくとも 1 つが大きな値の型である場合、切り捨ては発生しません。

于 2012-12-13T13:21:20.510 に答える