2009-07-10 88 views
2

將投影添加到nhibernate查詢的最佳方式是什麼?nhibernate查詢可能有或沒有1個或多個投影設置?調用.SetProjection()似乎取代了可能已經存在的投影。向nhibernate查詢添加投影

爲了給出一點背景環境,我正在使用找到的分頁結果擴展方法的一個版本here,我已經到了一個點,在那裏我傳遞了一個具有明確投影的查詢,但該投影被剝離了count條件因爲調用.SetProjection(Projections.RowCountInt64)。

回答

2

我不確定它是否能正常工作,因爲我現在無法檢查它,但爲什麼不使用類似ProjectionList這樣的方法來實現這個技巧?


var criteria = ... 
var projectionList = Projection.ProjectionList(); 

// Add you projections to the projectionList 
projectionList.Add(yourQueryProjection); 
projectionList.Add(Projections.RowCountInt64()); 

criteria.setProjection(projectionList); 

+0

值得注意的是,一旦您選擇使用投影,您必須指定您希望查詢返回的每一列。我對NH的經驗是有限的,但目前似乎沒有辦法告訴ICriteria API你想選擇與你正在選擇的實體相關的所有列,然後向查詢添加一個額外的投影。 。但是這似乎並不是一個非常困難的擴展方法添加到項目(或ICriteria API) – MoMo 2013-02-10 19:33:53

0

我沒有這樣做,所以你可能要返工有點,但我相信你可以做這樣的事情

.ProjectionCriteria.Add(Projections.RowCountInt64) 

因爲它可能沒有任何突出設置你可能要檢查什麼ProjectionCriteria財產就是這種情況。它可能爲空。

+0

我正在使用ICriteria,所以我實際上沒有.ProjectionCriteria可用於我。我想我可以通過一個實際的標準實現,但是我需要每個ICreiteria實現的擴展方法。任何其他想法? – mockobject 2009-07-10 17:39:43