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