我在使用EF 4.0作为数据库后端的ASP.NET 4.0 Web应用程序上发生了一件奇怪的事情。基本上,我有一张表,用于存储用户的密码重置请求(包含类型为byte[]
的重置密钥,类型DateTime
到期,以及包含string Email
和string Name
的User
的外部密钥)。某些用户没有设置电子邮件地址,因此对于PasswordRequest request
,request.Email
是null
。LINQ to Entities和空字符串
这是问题所在。这工作完全正常:
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;
我绝对难住。有任何想法吗?
的电子邮件字段在你的实际表中,是否声明为NULL列? – DoomerDGR8
@HassanGulzar确实如此。 – hydroiodic
你能发布生成的sql吗? – Marius