2016-04-22 8 views
1

私は次のようにオブジェクトクエリにLINQを実行しようとしている:条件付きNULL演算子を使用してヌル文字列をチェックするにはどうすればよいですか?

var c1 = allCustomers 
    .Where(x => x.CompanyName.Replace("'", "").StartsWith(searchText)) 
    .ToList(); 

これは限り仕入がnullでないと正常に動作します。

だから私はこれが新しい空の条件付き演算子のための完全な場所のようだと思った!次のように変更してください:

var c1 = allCustomers 
    .Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText)) 
    .ToList(); 

すべてが機能するはずです。

代わりに、私はエラーを取得する:

Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?) 

は、私がここに欲しいものを達成するためにどのように非常によく分かりません。このシナリオでは、どのようにnull条件を使用しますか?

答えて

5

をサポートしてnull以外の文字列であると

(x.CompanyName?.Replace("'", "") ?? string.Empty).StartsWith(searchText)) 

?? string.empty力はあなたが適切なブール値にトライステートに変換するために合体演算子を必要としています。

var c1 = allCustomers 
    .Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false) 
    .ToList(); 

それは三つの値持つことができるので、私はトライステートbool?を呼び出す:truefalsenullを。したがって、bool?boolに変換することは、明示的な処理が必要な狭い変換です。

1

あなたにはさらに疑問符が必要です! x.CompanyName?.Replaceもヌルを返すことができるので、ヌル併合も必要だと思います。今.startswith

+0

ACK、私は、文字列の代わりに、ブール値に地雷を置きます。私は私の仕事はうまくいくと思いますが、 '??偽のバージョンが良いです。 –

+0

ええ、もう片方の2つは。単にfalseを返します。 – Scottie

+0

私は、「bool?」ではなく、「null文字列のチェック」の部分に文字通り質問ツールを解釈しました。詳細の一部。 –

1
よう

使用??オペレータ:

Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false) 
+2

null-coalescing演算子がこれを解決する理由を説明してください。 – Lukazoid

関連する問題