2

我正在尝试执行 LINQ to objects 查询,如下所示:

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

我不太确定如何在这里完成我想要的。在这种情况下,我将如何使用 null 条件?

4

3 回答 3

5

您需要一个合并运算符将三态转换为适当的布尔值。

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

我称它为bool?三态是因为它可以有三个值truefalsenull; 因此,转换bool?bool需要明确处理的缩小转换。

于 2016-04-22T23:52:18.220 回答
1

你需要更多的问号!我认为您也需要空值合并,因为x.CompanyName?.Replace现在也可以返回空值。

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

强制它成为?? string.empty非空字符串,现在支持.startswith

于 2016-04-22T23:52:10.453 回答
1

使用??运算符,如:

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