LINQ to entities et des chaînes vides

J'en ai assez d'une chose étrange qui se passe sur un ASP.NET 4.0 application web à l'aide de EF 4.0 en tant que sa base de données back-end. Essentiellement, j'ai une table qui stocke les utilisateurs les demandes de réinitialisation de mot de passe (contenant une clé de réinitialisation de type byte[], une échéance de type DateTime, et une clé étrangère vers une User contenant un string Email et string Name). Certains utilisateurs n'ont pas une adresse e-mail, donc pour un PasswordRequest request, request.Email est null.

Voici le problème. Cela fonctionne parfaitement bien:

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;

- Je obtenir le nombre de résultats (différente de zéro, car il y a des entrées avec null e-mails).

Mais cela renvoie toujours un vide collection lors de la e est 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;

La seule chose que j'ai eu à travailler correctement (ce qui n'est pas logiquement aucun sens) est-ce:

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;

Je suis absolument perplexe. Des idées?

Le champ Email dans votre tableau, il est déclaré comme une colonne NULL?
En effet il est.
Pouvez-vous poster le code sql généré?

OriginalL'auteur hydroiodic | 2011-11-11