NHibernate:获取多对多时如何指定条件?

NHibernate:获取多对多时如何指定条件?,nhibernate,Nhibernate,想法是获取所有组并获取成员。我无法仅获取活动用户。你能帮我吗 映射: public class GroupDtoMap : DtoClassMap<GroupDto> { public GroupDtoMap() { Id(g => g.Id, "group_id"); HasManyToMany(g => g.Members) // Members is a List<UserDto>

想法是获取所有组并获取成员。我无法仅获取活动用户。你能帮我吗

映射:

public class GroupDtoMap : DtoClassMap<GroupDto>
{
    public GroupDtoMap()
    {
        Id(g => g.Id, "group_id");
        HasManyToMany(g => g.Members) //  Members is a List<UserDto>
            .Table("members")
            .ParentKeyColumn("group_id")
            .ChildKeyColumn("user_id");
    }
}
var groups = Session
            .CreateCriteria<GroupDto>()
                .Add(Expression.Eq("IsActive", true)) // Get only active groups
                .SetFetchMode("Members", NHibernate.FetchMode.Eager)
                .SetResultTransformer(new DistinctRootEntityResultTransformer())
                .Future<GroupDto>();
HasManyToMany(g => g.Members)
            .Table("members")
            .ParentKeyColumn("group_id")
            .ChildKeyColumn("user_id")
            .ChildWhere("status = 1");// the column in DB is 'status' with values 0/1
编辑:
好啊看起来ChildWhere()实际上正在工作。那是一个肮脏的储藏室。现在的问题是如何强制内部联接获取集合。目前它正在做左外连接。有什么想法吗?

据我所知,你不能。抱歉。但据我所知,您可以尝试使用映射。抱歉。但是您可以一直尝试使用映射

是成员表上的状态列吗?HQL对于此类查询更容易、更灵活。(
大小
存在
元素
等。请参阅参考手册:)我认为使用HQL编写此查询更加困难:|使用此HQL我获得了正确的sql,但成员属性未初始化:Session.CreateQuery(@“选择gr,组中的成员作为gr内部联接获取gr.Members作为成员,其中gr.IsActive=true,member.Id!=null”).SetResultTransformer(Transformers.DistincTrotenty).Future()当您对联接列进行筛选时,将忽略fetch,因为它可能不会返回所有子项来填充集合。成员表上的status列?HQL对于此类查询更容易、更灵活。(
size
exists
elements
等。请参阅参考手册:)我认为使用HQL编写此查询更加困难:|使用此HQL我得到了正确的sql,但成员属性未初始化:Session.CreateQuery(@)选择gr,gr中的成员作为gr内部联接获取gr.Members作为成员,其中gr.IsActive=true,member.Id!=null”).SetResultTransformer(Transformers.distinctropenty).Future()在对联接列进行筛选时,将忽略fetch,因为它可能不会返回所有子项来填充集合