У меня довольно странная вещь, происходящая в веб-приложении ASP.NET 4.0, использующего EF 4.0 в качестве серверной части базы данных. По сути, у меня есть таблица, в которую хранятся запросы пользователей на сброс пароля (содержащий ключ сброса типа byte[]
, истечение срока действия типа DateTime
и внешний ключ для User
, содержащий строку Email
и string Name
). У некоторых пользователей не задан адрес электронной почты, поэтому для запроса PasswordRequest
, 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
emails).
Но это всегда возвращает пустую коллекцию, когда 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;
Я абсолютно озадачен. Есть идеи?