2011-11-08 23 views

回答

0

好吧,非常有趣的是,當試圖在Select內部查詢中輸入值時,我的NH 3.2實際上因MismatchedTreeNodeException而失敗,甚至可以進行更簡單的查詢。你正在使用哪個版本?

無論如何,看起來你不能使用投影(Select)查詢以外的值,這可能是NHibernate的Linq限制。您的版本似乎緩存Select編譯的表達式,忽略它依賴於變量的事實。 DateTime所有呼叫的值都是一樣的,不是嗎?

有點清潔的解決辦法可能是這樣的:

.Select(g => new 
{ 
    Year = g.Key.Year, 
    Month = g.Key.Month, 
    TotalPageCount = g.Count(), 
    PublicPageCount = g.Count(p => p.State == PageState.Public && p.Published <= DateTime.UtcNow) 
}) 
.AsEnumerable() 
.Select(g => new Archive 
{ 
    ContextPageId = rootPage.Id, 
    Year = g.Year, 
    Month = g.Month, 
    TotalPageCount = g.TotalPageCount, 
    PublicPageCount = g.PublicPageCount 
}) 
.ToList(); 

編輯我已經看了多一點謹慎,這確實是一個NHibernate的錯誤,已經知道。見this blog postthis JIRA bug entry

+0

NH版似乎是3.2.0.4000,通過nuget安裝。我想我也必須檢查DateTime部分。 –

+0

確定 - 這是NHibernate中的一個已知錯誤 - 請參閱我的編輯。 – NOtherDev

相關問題