这很奇怪。
下面的代码抛出一个Object reference not set to an instance of an object
:
var members = db.Members.Where(
a =>
String.IsNullOrEmpty(searchEmail)
|| (a.Email ?? "").ToUpper().Contains(searchEmail.ToUpper()));
其中db
是 aDataContext
并且searchEmail
是字符串,在本例中设置为null
。
代码应该全部返回,Members
因为前半部分||
返回 true,但是,我得到了上述异常。
奇怪的是,如果我将代码更改为:
var members = db.Members.Where(
a =>
String.IsNullOrEmpty(searchEmail)
|| (a.Email ?? "").ToUpper().Contains((searchEmail ?? "").ToUpper()));
不抛出异常!据推测,这意味着它在明确String.IsNullOrEmpty
评估false
时正在评估true
,除非有一些关于IQueryable
' 的实施Where
?
更新
哈比卜的回答是正确的。对于阅读本文的其他人,我解决 Habib 解释的限制的解决方案是:
var members = db.Members.AsQueryable();
if (!String.IsNullOrEmpty(searchEmail))
members = members.Where(a => a.Email.ToUpper()
.Contains(searchEmail.ToUpper()));