2016-04-22 1 views
1

Я пытаюсь выполнить LINQ к объектам запроса следующим образом:Как я могу использовать условный оператор null для проверки нулевой строки?

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

Это прекрасно работает, пока CompanyName не является нулевым.

Итак, я думал, что это идеальное место для нового оператора нулевого условного оператора! Просто перейдите на:

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?) 

Я не совсем уверен, как сделать то, что я хочу здесь. Как использовать нулевой условный код в этом сценарии?

ответ

5

Вам нужен оператор Coalesce преобразовать три-состояния к правильному булево.

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

Я называю bool? с тремя состояниями, так как он может иметь три значения: true, false и null; поэтому преобразование bool? в bool является сужающим преобразованием, требующим явного обращения.

1

вам нужно больше вопросительных знаков! Я думаю, вам также нужен нулевой коалесцинг, так как x.CompanyName?.Replace теперь может также вернуть null.

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

в ?? string.empty силы, чтобы быть не пустая строка, которая теперь поддерживает .startswith

+0

ACK, я поставил мину на строку вместо BOOL. я думаю, что моя будет работать, но '?? неверные версии. –

+0

Да, другие 2 будут замыкаться на. и просто верните false. – Scottie

+0

Я интерпретировал инструмент вопроса буквально на части «check for null string», а не на 'bool? ' деталь в деталях. –

1

?? Используйте оператор как:

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

Не могли бы вы дать некоторое объяснение, почему оператор с нулевым коалесцентом разрешит это? – Lukazoid

Смежные вопросы