I am using NHibernate with mapping by code.
I have three models: Solution, Installation and System. There are one-to-many relations between them. So that each Solution has a list of Installations, and each Installation has a list of Systems.
Each system has a property "Type", which can be "1" or "0".
I am trying to write a method in the Solution repository that will return all the Solutions, with their Installations with only the Systems of type "1".
I have tried the Where-keyword in the SystemMap but i get the same result with and without it. Then i tried a few different experiments with QueryOver(???) without success.
How do i go about to filter on information in the last node?
Thank to your answer, i have done the following implementation, but it results in a huge amount of Systems and Solutions. Maybe i have done something wrong?
The Maps are as follows:
    public SAPSolutionMap()
    {
        Id(t => t.YPID);
        Property(e => e.ShortName);
        Property(e => e.FullName);
        Bag(x => x.SapInstallations, colmap =>
        {
            colmap.Table("SAPInstallation");
            colmap.Key(x => x.Column("Solution"));
            colmap.Inverse(true);
            colmap.Lazy(CollectionLazy.NoLazy);
            colmap.Fetch(CollectionFetchMode.Join);
            colmap.Cascade(Cascade.None);
        }, map => map.OneToMany(m => m.Class(typeof(SAPInstallation))));
    }
    public SAPInstallationMap()
    {
        Id(t => t.InstallationNumber);
        Bag(x => x.SapSystems, colmap =>
        {
            colmap.Table("sapgui");
            colmap.Key(x => x.Column("Installation"));
            colmap.Inverse(true);
            colmap.Lazy(CollectionLazy.NoLazy);
            colmap.Cascade(Cascade.None);
            colmap.Fetch(CollectionFetchMode.Join);
            //colmap.Where("Type = 1");
        }, map => map.OneToMany(m => m.Class(typeof(SAPSystem))));
        ManyToOne(x => x.SapSolution, map =>
        {
            map.Column("Solution");
            map.NotNullable(true);
            map.Cascade(Cascade.None);
            map.Class(typeof(SAPSolution));
        });
    }
    public SAPSystemMap()
    {
        Id(t => t.ID, t => t.Generator(Generators.Identity));
        Property(e => e.Type);
        Property(e => e.ExplanationText);
        ManyToOne(x => x.SapInstallation, map =>
        {
            map.Column("Installation");
            map.NotNullable(true);
            map.Cascade(Cascade.None);
            map.Class(typeof(SAPInstallation));
        });
    }
And the Query:
    public IList<SAPSolution> GetProductionSystems()
    {
        SAPSystem syst = null;
        SAPInstallation installation = null;
        var subquery = QueryOver.Of(() => syst)
            .JoinQueryOver(x => x.SapInstallation, () => installation)
            .Where(() => syst.Type == 1)
            .Select(x => installation.SapSolution.YPID);
        // main Query 
        var query = Session.QueryOver<SAPSolution>()
            .WithSubquery
                .WhereProperty(root => root.YPID)
            .In(subquery);
        return query.List<SAPSolution>();
    } 
Thank you!