【发布时间】:2011-11-11 07:26:57
【问题描述】:
我在使用 EF 4.0 作为其数据库后端的 ASP.NET 4.0 Web 应用程序上发生了一件很奇怪的事情。本质上,我有一个存储用户密码重置请求的表(包含byte[] 类型的重置密钥、DateTime 类型的到期时间以及包含User 的外键string Email 和@ 987654325@)。有些用户没有设置电子邮件地址,因此对于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;
我完全被难住了。有什么想法吗?
【问题讨论】:
-
实际表中的 Email 字段,是否声明为 NULL 列?
-
可以把生成的sql贴一下吗?
标签: c# asp.net sql-server entity-framework linq-to-entities