2009-08-08 7 views
3

Comment utiliser la méthode Find<T> de Subsonic pour rechercher des lignes avec un champ contenant la valeur "null". Pour les besoins de la discussion, supposons que j'ai une classe aC# appelée "Visit" qui contient un champ DateTime nullable appelé "SynchronizedOn" et supposons aussi que la migration Subsonic a créé la table "Visites" correspondante et le champ "SynchronizedOn" .Subsonic 3, SimpleRepository, SQL Server: Comment trouver des lignes avec un champ nul?

Si je devais écrire la requête SQL moi-même, je voulais écrire quelque chose comme:

SELECT * FROM Visits WHERE SynchronizedOn IS NULL 

Lorsque j'utilise le code suivant:

var visits = myRepository.Find<Visit>(x => x.SynchronizedOn == null); 

Subsonic il se transforme en la requête SQL suivante:

SELECT * FROM Visits WHERE SynchronizedOn == null 

qui ne renvoie jamais de lignes.

J'ai essayé le code suivant, mais il génère une erreur:

visits = repository.Find<Visit>(x => x.SynchronizedOn.HasValue); 

J'ai pu utiliser la syntaxe suivante:

var query = from v in repository.All<Visit>() 
      where v.SynchronizedOn == null 
      orderby v.CreatedOn 
      select v; 
visits = query.ToList<Visit>(); 

mais ce n'est pas aussi belle un court en utilisant la méthode Find<T> . Tout le monde sait comment je peux spécifier la condition «SynchronizedOn IS NULL» dans la méthode Find<T>

Répondre

1

Vous pouvez utiliser:

var visits = myRepository.All<Visit>().Where(x => x.SynchronizedOn == null).ToList(); 
+0

Votre suggestion est une amélioration de ma requête LINQ mais pas en utilisant la méthode Trouver . Dois-je comprendre que la méthode Find est incapable de vérifier null? – desautelsj

Questions connexes