2

次のように、LINQ to objects クエリを実行しようとしています。

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

これは、CompanyName が null でない限り正常に機能します。

だから、これは新しい 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 条件を使用するにはどうすればよいですか?

4

3 に答える 3

5

トライステートを適切なブール値に変換するには、合体演算子が必要です。

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

、および;のbool?3 つの値を持つことができるため、トライステートと呼びます。したがって、への変換は、明示的な処理を必要とする縮小変換です。truefalsenullbool?bool

于 2016-04-22T23:52:18.220 に答える
1

もっと疑問符が必要です!x.CompanyName?.Replacenullを返すこともできるよう になったので、null合体も必要だと思います。

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

null 以外の文字列にする?? string.empty強制。現在サポートされています。.startswith

于 2016-04-22T23:52:10.453 に答える
1

??次のような演算子を使用します。

Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false)
于 2016-04-22T23:52:52.303 に答える