对象结构:
一所房子有很多房间。
一个房间有很多桌子。
桌子上有很多花瓶。

房屋>客房>桌子>花瓶。

我想使用JoinQueryOver来选择带有红色花瓶的所有表-在特定的房子里。

我想这样做:

var v = session.QueryOver<House>()
    .Where(x => x.ID == HouseID)
        .JoinQueryOver<Room>(x => x.Rooms)
            .JoinQueryOver<Table>(x => x.Tables)
                .JoinQueryOver<Vase>(x => x.Vases)
                    .Where(x => x.Color == "Red")
    .SingleOrDefault<House>();


这是我尝试过的方法(在许多失败的方法中)。我真的不想要房屋和房间信息。

最终,我正在寻找一个表列表(在特定的房屋中),并获取其花瓶(红色)的集合。

谢谢您的帮助!

编辑

这样的事情会很好:

var v = session.QueryOver<Table>()
        .Where(x => x.Room.House.ID == HouseID) // this Where won't work.
            .JoinQueryOver<Vase>(x => x.Vases)
                .Where(x => x.Color == "Red")
        .List().ToList();

最佳答案

var v = session.QueryOver<Table>()
    .JoinAlias(x => x.Room, () => room)
    .Where(() => room.House.ID == HouseID)
    .JoinQueryOver<Vase>(x => x.Vases)
        .Where(x => x.Color == "Red")
    .List();

10-06 00:34