2009-08-08 7 views
3

Wie kann ich die Find<T> Methode von Subsonic verwenden, um nach Zeilen mit einem Feld zu suchen, das den Wert "null" enthält? Für die Diskussion nehmen wir an, ich habe eine aC# -Klasse namens "Visit", die ein Nullable-DateTime-Feld mit dem Namen "SynchronizedOn" enthält und nehmen an, dass die Subsonic-Migration die entsprechende "Visits" -Tabelle und das "SynchronizedOn" -Feld erstellt hat .Subsonic 3, SimpleRepository, SQL Server: Wie finde ich Zeilen mit einem Nullfeld?

Wenn ich die SQL-Abfrage selbst zu schreiben, würde ich so etwas schreiben:

SELECT * FROM Visits WHERE SynchronizedOn IS NULL 

Wenn ich den folgenden Code:

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

Subsonic verwandelt es sich in die folgende SQL-Abfrage:

SELECT * FROM Visits WHERE SynchronizedOn == null 

die nie irgendwelche Zeilen zurückgibt.

Ich habe versucht, den folgenden Code, aber es wirft einen Fehler:

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

konnte ich die folgende Syntax verwenden:

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

aber es ist nicht so schön, ein kurz wie die Find<T> Methode .

Weiß jemand wie ich die "SynchronizedOn IS NULL" Bedingung in der Find<T> Methode angeben kann?

Antwort

1

können Sie verwenden:

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

Ihr Vorschlag ist eine Verbesserung auf meine Linq-Abfrage, aber nicht die Methode finden Verwendung. Sollte ich verstehen, dass die Methode Find nicht auf Null prüfen kann? – desautelsj

Verwandte Themen