Oak*_*ool 25 .net c# linq-to-sql
这是查询
from a in this._addresses
where a.Street.Contains(street) || a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
Run Code Online (Sandbox Code Playgroud)
如果where子句中的两个属性都有值,这可以正常工作,但是如果例如a.StreetAdditional为null(大多数时候),我将得到一个空引用异常.
有没有解决这个问题?
谢谢,
Yul*_*liy 48
我使用null-coalescing运算符...
(from a in this._addresses
where (a.Street ?? "").Contains(street) || (a.StreetAdditional ?? "").Contains(streetAdditional)
select a).ToList<Address>()
Run Code Online (Sandbox Code Playgroud)
dri*_*iis 43
最明显的一个:
from a in this._addresses
where (a.Street != null && a.Street.Contains(street)) || (a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional))
select a).ToList<Address>()
Run Code Online (Sandbox Code Playgroud)
或者,您可以为Contains编写一个扩展方法,该方法接受null参数而不会出错.有些人可能会说拥有这样的方法并不是那么漂亮,因为它看起来像普通的方法调用,但是允许空值(从而放弃了正常的空值检查实践).
您必须先检查是否StreetAdditional
是null
。
尝试
where a.Street.Contains(street) || ((a != null) && a.StreetAdditional.Contains(streetAdditional))
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它&&
是一个快捷操作符,如果a != null
产生 false,null
则不会评估带有-value的第二个表达式,因为false
无论如何结果都是如此。