C#学习教程:NHibernate-使用ICriteria和可选的ICriteria调用进行分页x.SetFetchMode(DomainModelHelper.GetAssociationEntityNameAsPlural(),FetchMode.Eager));但我不知道如何将此Func传递给ISession或ICriteria。我有一个标准的分页扩展方法,这个扩展方法应该有一个重载,我可以在其中传递额外的ICriteria方法,这样我也可以设置FetchMode或其他东西。扩展方法:publicstaticclassCriteriaExtensions{publicstaticPagedListToPagedList(thisISessionsession,intpage,intpageSize)whereT:Entity{vartotalCount=TotalCount(session);返回新的PagedList(session.CreateCriteria().SetFirstResult(pageSize*(page-1)).SetMaxResults(pageSize*page).Future().ToList(),page,pageSize,totalCount);}publicstaticPagedListToPagedList(thisISessionsession,intpage,intpageSize,Funcaction)whereT:Entity{vartotalCount=TotalCount(session);...}privatestaticintTotalCount(ISessionsession)whereT:Entity{returnsession.CreateCriteria().SetProjection(Projections.RowCount()).FutureValue().Value;}}编辑:没有过载,它看起来像这样:扩展方法:publicstaticclassCriteriaExtensions{publicstaticPagedListToPagedList(thisICriteriacriteria,intpage,intpageSize)whereT:Entity{varcopiedCriteria=(ICriteria)criteria.Clone();vartotalCount=TotalCount(标准);returnnewPagedList(copiedCriteria.SetFirstResult(pageSize*(page-1)).SetMaxResults(pageSize*page).Future().ToList(),page,pageSize,totalCount);}privatestaticintTotalCount(ICriteriacriteria){returncriteria.SetProjection(Projections.RowCount()).FutureValue().Value;}}行varcopiedCriteria=(ICriteria)criteria.Clone();这里有味道,但我不知道如何改变这种情况。您有什么建议?据我了解,您正试图从创建它的方法之外修改标准的行为。所以你有:publicIListGetPageOf(intpage,intpageSize,Funcmodifier){returnSession.CreateCriteria().SetFirstResult(pageSize*(page-1)).SetMaxResults(pageSize).ToList();如果有机会,您需要做的就是将正文更改为:();请注意,在使用SetFirstResult或SetMaxResults的条件下更改多对多和多对一关系的提取模式可能会导致检索到错误的行数。有点晚了,但是嘿!最简单的方法是扩展IQueryOver而不是ICriteria,如下所示:publicstaticPaginatedListPaginate(thisIQueryOverinstance,intpage,intpageSize)vartotalCount=countCriteria.FutureValue();varitems=instance.Take(pageSize).Skip((page-1)*pageSize).List();返回新的分页列表(项目,页面,pageSize,totalCount.Value);这将允许您执行所有Eager抓取(它们将在行计数查询中删除,但条件将保持不变)。示例:session.QueryOver().Where(x=>x.Status==CustomerStatus.Preferred).Fetch(x=>x.Orders).Eager.Paginate(1,10);将生成两个sql查询,如下所示:对于所有项目:SELECTthis_.id,this_.url,order_.sumFROMCustomersthis_LEFTOUTERJOINordersorder_ONthis_.id=order_.customer_idWHEREthis_.status=1LIMIT10;计数:以上是C#学习教程:NHibernate-使用ICriteria进行分页和可选的ICriteria调用分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——SELECTcount(*)asy0_FROMCustomersthis_WHEREthis_.type=1;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
