我试图按如下方式执行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条件?
答案 0 :(得分:5)
您需要一个coalesce运算符将三态转换为适当的布尔值。
var c1 = allCustomers
.Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false)
.ToList();
我将bool?
称为三态,因为它可以有三个值:true
,false
和null
;因此,将bool?
转换为bool
是一种需要明确处理的缩小转换。
答案 1 :(得分:1)
你需要更多问号!我认为你也需要空合并,因为x.CompanyName?.Replace
现在也可以返回null。
(x.CompanyName?.Replace("'", "") ?? string.Empty).StartsWith(searchText))
?? string.empty
强制为非空字符串,现在支持.startswith
答案 2 :(得分:1)
使用??
运算符,如:
Where(x => x.CompanyName?.Replace("'", "").StartsWith(searchText) ?? false)