2009-12-30 41 views
2

我正在使用Subsonic(SimpleRepository)來查詢我的SQL 2008數據庫。我試圖編寫一個查詢來計算兩個字段之間的天數,並返回差值小於給定數字的記錄。但是,我收到「The member'Days'不支持」錯誤。Subsonic:成員'天'不支持

任何人都可以建議一個替代查詢嗎?

這裏是我試圖運行查詢:

var repository = new SimpleRepository("MyConnection", 
           SimpleRepositoryOptions.None); 
var query = (from c in repository.All<Data.Customer>() 
      where c.LastSynchronizedOn == null || 
        (c.LastSynchronizedOn - c.CreatedOn).Days <= 7) 
      select c).Distinct(); 

編輯:

我想:

(c.LastSynchronizedOn == null || (c.LastSynchronizedOn.Value - c.CreatedOn).Days <= 7) 

我得到相同的異常:會員 '日' 不是支持

我也試過了:

(c.LastSynchronizedOn == null || ((c.LastSynchronizedOn - c.CreatedOn) > new TimeSpan(7, 0, 0, 0))) 

我得到:無法將參數值從TimeSpan轉換爲字符串。

回答

0

請檢查領域LastSynchronizedOnCreatedOn的問題是不相關的亞音速,但.NET是抱怨(如果這是把它正確的方式),因爲表達(c.LastSynchronizedOn - c.CreatedOn)可能不會返回DateTime對象的數據類型。

編輯: - 根據您的意見,請試試這個

(c.LastSynchronizedOn.Value - c.CreatedOn).Days 

EDIT(2):聲明

(c.LastSynchronizedOn == null || 
    ((c.LastSynchronizedOn - c.CreatedOn) > new TimeSpan(7, 0, 0, 0))) 

返回布爾(true或false)

試試這個:

var repository = new SimpleRepository("MyConnection", 
          SimpleRepositoryOptions.None); 
var query = (from c in repository.All<Data.Customer>() 
where ((c.LastSynchronizedOn ?? 
       new DateTime(c.CreatedOn.Year, c.CreatedOn.Month, 
          c.CreatedOn.Day).AddDays(-7)) 
    - c.CreatedOn).Days <= 7) select c).Distinct(); 
+0

LastSynchronizedOn是Dat ETIME?和CreatedOn是日期時間 – desautelsj 2009-12-30 07:30:14

+0

我相信Subsonic拋出錯誤不是.NET的原因是因爲異常的「源」是「Subsonic.Core」 – desautelsj 2009-12-30 08:16:05

+0

...並且堆棧跟蹤頂部的條目是「在SubSonic.Linq.Structure.TSqlFormatter.VisitMemberAccess(MemberExpression m)」 – desautelsj 2009-12-30 08:17:22

相關問題