2009-08-08 66 views
3

如何使用Subsonic的Find<T>方法來搜索包含「null」值的字段的行。爲了討論,假設我有一個名爲「Visit」的ac#類,其中包含一個名爲「SynchronizedOn」的可爲空的DateTime字段,並且我們假設Subsonic遷移已創建相應的「Visits」表和「SynchronizedOn」字段。Subsonic 3,SimpleRepository,SQL Server:如何查找具有空字段的行?

如果我寫的SQL查詢我自己,我會寫這樣的:

SELECT * FROM Visits WHERE SynchronizedOn IS NULL 

當我使用下面的代碼:

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

亞音速把它變成下面的SQL查詢:

SELECT * FROM Visits WHERE SynchronizedOn == null 

從不返回任何行。

我試着下面的代碼,但它拋出一個錯誤:

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

我可以使用以下語法:

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

,但它不是漂亮的短,使用Find<T>方法。

任何人都知道如何在Find<T>方法中指定「SynchronizedOn IS NULL」條件?

回答

1

您可以使用:

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

你的建議是對我的LINQ查詢的改善,但不使用查找方法。我是否應該瞭解Find 方法無法檢查null? – desautelsj 2009-08-11 15:06:20

相關問題