public IList<Message> ListMessagesBy(string text,IList<Tag> Tags,int pageIndex,out int count,out int pageSize) { pageSize = 10; var likeString = string.Format("%{0}%",text); var query = session.queryOver<Message>() .Where(Restrictions.On<Message>(m => m.Text).Islike(likeString) || Restrictions.On<Message>(m => m.Fullname).Islike(likeString)); if (Tags.Count > 0) { var tagIDs = Tags.Select(t => t.ID).ToList(); query .JoinqueryOver<Tag>(m => m.Tags) .WhereRestrictionOn(t => t.ID).IsInG(tagIDs) .transformUsing(transformers.distinctRootEntity); } count = 0; if(pageIndex < 0) { count = query.ToRowCountquery().FutureValue<int>().Value; pageIndex = 0; } return query.OrderBy(m => m.Created).Desc.Skip(pageIndex * pageSize).Take(pageSize).List(); }
我试过了两个
.transformUsing(transformers.distinctRootEntity);
和
.RootCriteria.SetResulttransformer(new distinctEntityRoottransformer())
它搞砸了总计数(它返回结果无明显)和实际的分页(Skip / Take)
我怎样才能解决这个问题?
提前谢谢,安德斯
解决方法 尝试这样的事情public IPagedList<ClIEnt> Find(int pageIndex,int pageSize){ ClIEnt clIEntAlias = null; var query = Session.queryOver<ClIEnt>(() => clIEntAlias) .Select( Projections.distinct( Projections.ProjectionList() .Add(Projections.Property<ClIEnt>(x => x.ID).As("ID")) .Add(Projections.Property<ClIEnt>(x => x.name).As("name")) .Add(Projections.Property<ClIEnt>(x => x.Surname).As("Surname")) .Add(Projections.Property<ClIEnt>(x => x.Givenname).As("Givenname")) .Add(Projections.Property<ClIEnt>(x => x.EmailAddress).As("EmailAddress")) .Add(Projections.Property<ClIEnt>(x => x.MobilePhone).As("MobilePhone")) ) ) .transformUsing(transformers.AliasToBean<ClIEnt>()) .OrderBy(() => clIEntAlias.Surname).Asc .ThenBy(() => clIEntAlias.Givenname).Asc; var count = query .ToRowCountquery() .FutureValue<int>(); return query .Take(pageSize) .Skip(Pagination.FirstResult(pageIndex,pageSize)) .List<ClIEnt>() .topagedList(pageIndex,pageSize,count.Value);}总结
以上是内存溢出为你收集整理的c# – nHibernate的问题区分和分页全部内容,希望文章能够帮你解决c# – nHibernate的问题区分和分页所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)