0

我有難以令人信服的NHibernate(EF能夠做到這一點)基於DateTime實體屬性的Hour屬性進行篩選。我的實體類似於:NHibernate篩選條件 - 小時的日期時間

public class Invoice { 
    // ... 
    public DateTime Time { get; set; } 
    // ... 
} 

我需要檢索在某個小時(例如22)「製作」的所有發票。一個可能的查詢可以是:

from i in s.Linq<Invoice>() 
where i.Type.Id == Invoice.Type.Local && 
     i.TimeOfRegister.Hour == 22 
select i 

但是我被拋出的異常,說明TimeOfRegister的財產小時不能被解析...

LE:異常的詳細信息:無法解析屬性:TimeOfRegister.Hour:MyCompany.Entities.Invoice

回答

1

嗯,我的一位同事建議採取另一條路線:

定義一個int(或字節)屬性的實體(假設「HourOfRegister」),然後在它的映射類映射到一個公式:

Map(a => a.HourOfRegister).Formula("DATEPART(HOUR, TimeOfRegister)"); 

然後,我可以作爲我喜歡用它在查詢中。

2

聽起來像NHibernate沒有看到一個DateTime作爲一個組件,它具有它可以選擇的屬性,它將它視爲一個屬性。您可能必須使用函數來獲取DateTime的Hour部分。

在HQL的SQLServer2005的:小時(i.TimeOfRegister)