向nhibernate查询添加投影

问题描述:

将投影添加到nhibernate查询的最佳方式是什么?nhibernate查询可能有或没有1个或多个投影设置?调用.SetProjection()似乎取代了可能已经存在的投影。向nhibernate查询添加投影

为了给出一点背景环境,我正在使用找到的分页结果扩展方法的一个版本here,我已经到了一个点,在那里我传递了一个具有明确投影的查询,但该投影被剥离了count条件因为调用.SetProjection(Projections.RowCountInt64)。

我不确定它是否能正常工作,因为我现在无法检查它,但为什么不使用类似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

我没有这样做,所以你可能要返工有点,但我相信你可以做这样的事情

.ProjectionCriteria.Add(Projections.RowCountInt64) 

因为它可能没有任何突出设置你可能要检查什么ProjectionCriteria财产就是这种情况。它可能为空。

+0

我正在使用ICriteria,所以我实际上没有.ProjectionCriteria可用于我。我想我可以通过一个实际的标准实现,但是我需要每个ICreiteria实现的扩展方法。任何其他想法? – mockobject 2009-07-10 17:39:43