这很奇怪。
下面的代码抛出一个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()));