Fluent Nhibernate inner join Master public virtual int Id { get; private set; } public virtual Imagen imagen { get; set; } Imagen public virtual int Id { get; private set; } public virtual Linea linea { get; set; } Linea public virtual int Id { get; private set; } public virtual String Nombre { get; set; } SELECT * FROM dbo.Master INNER JOIN dbo.Imagen ON dbo.Master.imagen_id = dbo.Imagen.Id INNER JOIN dbo.Linea ON dbo.Imagen.linea_id = dbo.Linea.Id WHERE dbo.Linea_Id = 5 ICriteria c = session.CreateCriteria(typeof(Master)) .CreateAlias("dbo.Imagen", "img", JoinType.InnerJoin) .Add(Restrictions.Eq("img.linea_id", id_linea)); return c.List(); var list = session.QueryOver() .JoinQueryOver(master => master.imagen) .Where(imagen => imagen.linea.Id == 5) .List(); ICriteria c = session.CreateCriteria(typeof(Master)) .CreateAlias("imagen", "img", JoinType.InnerJoin) .CreateAlias("img.linea", "lin", JoinType.InnerJoin) .Add(Restrictions.Eq("lin.Id", 5)); return c.List();