使用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