首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QueryOver进行左连接、distinct和分页

使用QueryOver进行左连接、distinct和分页
EN

Stack Overflow用户
提问于 2011-12-20 21:11:15
回答 1查看 1.4K关注 0票数 2

我有这样的问题,这似乎是常见的,但实际上没有从SO和谷歌的解决方案为我工作。

让我们考虑一下这样的情况(与我的非常相似):

代码语言:javascript
复制
    public class User
    {
     public int Id;
     public string Name;
     //30 other fields;
     public IList<Role> Roles;
    }

    public class Role
    {
     public int RoleNumber;
     public int UserId;
    }

1个用户可以有0-多个角色。

我想在网格视图上显示用户列表与它的字段和额外的“角色”列,这将显示他的所有RoleNumbers (使用中继器)。要获得它,我需要获得用户及其角色的不同列表。

可以用QueryOver创建这样的查询吗?所有来自互联网的解决方案都说,我应该创建子查询,这将Id,然后第二个查询,这将返回用户的Id在子查询。它工作并向我返回区别列表,但没有角色,因此NH为每个用户生成额外的select,以获取丢失的信息。

我的问题是:

代码语言:javascript
复制
Role roles = null;
User users = null;
IQueryOver<User,User> userQuery = ... 
IQueryOver<User,User> distQuery = ...
distQuery.JoinAlias(f=> f.Roles, () => Roles, JoinType.LeftOuterJoin)
         .Select(Projections.Distinct(Projections.Id()));

userQuery.WithSubquery.WhereProperty(g => g.Id).In<User>((QueryOver<User>)    distQuery) //and other joins, wheres etc.

返回不带角色的区分列表

如果我将第二个连接添加到角色,它将返回带有角色和重复项的列表

如果我将第二个联接添加到角色并使用

代码语言:javascript
复制
TransformUsing(new DistinctRootEntityResultTransformer())

它将返回包含用户和角色的区分列表,但分页将不起作用,RowCount()将返回错误的数字。

你知道我能做什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-20 23:20:40

基本上,NHibernate目前不支持您所要求的内容。您不能立即加载UsersRoles并控制分页。

我会首先得到一个分页的用户列表(例如25个),然后在你需要的时候延迟加载角色。

代码语言:javascript
复制
Session.QueryOver<User>().Skip(x).Take(25);

并将映射文件更改为:-

代码语言:javascript
复制
<bag class="Role" Name="Roles" batch-size='25' ...>
...
</bag>

这将发送一个查询来检索分页的Users列表,然后发出第二个查询来获取用户的所有角色。这是到目前为止性能最好的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8575984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档