2011-07-06 95 views
6

我有一個相當徑流式的磨QueryOver查詢包含以下,截斷日期時間NHibernate的QueryOver SelectGroup

.SelectList(list => list 
    .SelectGroup(() => txn.GroupField) 
    .SelectGroup(() => txn.Date)) 
.List<object[]>() 

此查詢的工作然而,由於預期我現在有被截斷的日期到組的要求因爲這些對象的某些日期可能包含時間組件。這似乎應該是一個微不足道的變化,但我找不到NHibernate支持的方式。

顯而易見的解決方案將是下面的變化,但不支持。

.SelectGroup(() => txn.Date.Date)) 

任何想法?

感謝

回答

4

QueryOver看起來是這樣的:

Status alias = null; 
var query = QueryOver.Of(() => alias) 
    .Select(Projections.GroupProperty(
     Projections.SqlFunction("date", NHibernateUtil.Date, Projections.Property(() => alias.Date)))); 

輸出(僞SQL):

SELECT 
      ... 
FROM  [Status] this_ 
GROUP BY dateadd(dd, 0, datediff(dd, 0, this_.Date)) 

希望這有助於,乾杯!

+0

非常感謝,MonkeyCoder。 我試圖使用SelectList()/。SelectGroup()與投影,但失敗。 – shatl

0

您可能想要使用公式命令向地圖添加助手屬性,以便能夠在查詢中使用日期(而不是日期時間)。

這裏是我的代碼示例;它採用的是十進制數,但能正常工作與任何子查詢:

model類都有這個屬性,映射到一個公式:

public virtual decimal Profit 
{ 
    get { return this.SellPrice - this.Cost; } 
    set { return; } 
} 

fluentNHibernate地圖:

//SellPrice and Cost are columns in the object's table 
Map(v => v.Profit).Formula("(SellPrice - Cost)"); // this field is calculated, not read 

肯定把公式放在()括號之間。

如果您將公式設置爲一個選擇查詢,將日期時間轉換爲日期,則可以在查詢中按屬性進行分組。

相關問題