我在一个使用EF 4.0作为数据库后端的ASP.NET 4.0 Web应用程序中遇到了一个相当奇怪的问题。基本上,我有一个存储用户密码重置请求的表(包含类型为byte []
的重置密钥,类型为DateTime
的过期时间以及指向包含string Email
和string Name
的User
的外键)。一些用户没有设置电子邮件地址,因此对于 PasswordRequest request
,request.Email
是 null
。
这里出现了问题。以下代码完全正常运行:
string u = Request["u"];
string e = Request["e"];
var requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == null && r.Expiry >= DateTime.Now
select r;
我得到了预期的结果数量(非零,因为存在包含null
电子邮件的条目)。
但是当e
为null
时,这总是返回一个空集合:
string u = Request["u"];
string e = Request["e"];
var requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == e && r.Expiry >= DateTime.Now
select r;
唯一能够正常工作的事情(在逻辑上并不合理)是:
string u = Request["u"];
string e = Request["e"];
IQueryable<PasswordRequest> requests;
if (e == null)
requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == null && r.Expiry >= DateTime.Now
select r;
else
requests = from r in context.PasswordRequests
where r.User.Name == u && r.User.Email == e && r.Expiry >= DateTime.Now
select r;
我完全被难住了,有什么想法吗?