使用 String.StartsWith 方法时如何处理 NULL

iro*_*man 0 c#

在复杂where子句中使用 String.StartsWith() 时如何处理空值?

var value = _context.Repo.Pages.Where(r => r.Sdate <= data.Pdate && (r.Edata == null || data.RData <= r.Edata)
&&  ......
&&  ...... several conditions
&&  ......
|| (data.SisPlan.StartsWith("T") && r.SisN == data.SisCal));
Run Code Online (Sandbox Code Playgroud)

我试过了,data?.SisPlan.StartsWith("T")但收到消息:

运算符“&&”不能应用于“bool?”类型的操作数 和“布尔”

我试图防止在where子句之外进行空检查。

alo*_*ica 5

通常的写法是:

|| ((data?.SisPlan?.StartsWith("T") ?? false) && r.SisN == data.SisCal));
Run Code Online (Sandbox Code Playgroud)

我们依靠??运算符来获取空情况,在这种情况下我们返回一个假值。在??被称为空合并运算符

基本上,

var a = data?.SisPlan?.StartsWith('T') ?? false;
Run Code Online (Sandbox Code Playgroud)

是语法糖

bool a = false;
if (data != null && data.SisPlan != null && data.SisPlan.StartsWith('T'))
    a = true;
Run Code Online (Sandbox Code Playgroud)

  • 我通常选择 `!= true` 而不是 `?? false` 确实看起来有点奇怪,但不需要括号 (2认同)