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

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

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

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

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

回答

通常的写法是:

|| ((data?.SisPlan?.StartsWith("T") ?? false) && r.SisN == data.SisCal));

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

基本上,

var a = data?.SisPlan?.StartsWith('T') ?? false;

是语法糖

bool a = false;
if (data != null && data.SisPlan != null && data.SisPlan.StartsWith('T'))
    a = true;

  • I usually go for `!= true` rather than `?? false` which admittedly looks slightly odd, but doesn't require brackets

以上是使用String.StartsWith方法时如何处理NULL的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>