当前位置: 首页 > 编程语言 > C#

nHibernateQueryOver中的GROUPBY和HAVING子句分享

时间:2023-04-11 02:40:21 C#

nHibernateQueryOver中的GROUPBY和HAVING子句我正在尝试用nHibernateQueryOver语言编写这个特定的sql查询,我不是很熟悉:SELECTMessageThreadIdFROMMessageThreadAccessesWHEREProfileIdIN(arr)GROUPBYMessageThreadIdHAVINGCOUNT(MessageThreadId)=arr.Count其中arr是整数数组(用户ID)我作为参数传递,MessageThreadAccess实体如下所示:publicvirtualMessageThreadMessageThread{得到;放;}publicvirtualProfileProfile{get;放;....阅读多个堆栈溢出线程并进行实验后,我得到了我的查询(试图获取MessageThread对象-它应该总是只有一个或没有),但它仍然不起作用而且我不确定是什么否则尝试。查询似乎总是返回一个MessageThreadAccess对象,但在读取其MessageThread属性时,它始终为NULL。varaccess=Session.QueryOver().WhereRestrictionOn(x=>x.Profile).IsIn(participants.ToArray()).Select(Projections.ProjectionList().Add(Projections.Group(x=>x.MessageThread))).Where(Restrictions.Eq(Projections.Count(x=>x.MessageThread.Id),participants.Count)).TransformUsing(Transformers.AliasToBean()).SingleOrDefault();返回Session.QueryOver().Where(x=>x.Id==access.MessageThread.Id).SingleOrDefault();有人可以指出我正确的方向,或者解释我做错了什么吗?提前致谢。我猜您可能正在尝试使用DTO来存储结果,而不是尝试将结果放入MessageThreadAccess而不是一个(没有配置文件)。也许你可以试试:publicclassMessageThreadCountDTO{publicMessageThreadThread{get;放;}publicintNb{得到;放;}}然后varprofiles=newint[]{1,2,3,4};MessageThreadCountDTOmtcDto=null;varmyResult=_laSession.QueryOver().WhereRestrictionOn(x=>x.Profile.Id).IsIn(配置文件).SelectList(list=>list.SelectGroup(x=>x.MessageThread).WithAlias(()=>mtcDto.Thread).SelectCount(x=>x.MessageThread).WithAlias(()=>mtcDto.Nb)).Where(Restrictions.Eq(Projections.Count(x=>x.MessageThread),profiles.Count())).TransformUsing(Transformers.AliasToBean()).List().FirstOrDefault();将配置文件配置为Profile[],而不是int[],然后以下行:.WhereRestrictionOn(x=>x.Profile.Id).IsIn(profiles)应该是:.WhereRestrictionOn(x=>x.Profile).IsIn(profiles)希望对你有所帮助如果对你有用,需要进一步了解C#学习教程,希望你多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: