Получение с JoinQueryOver: получить великих детей, знать отца - PullRequest
4 голосов
/ 31 августа 2011

Структура объекта: В доме много комнат.В комнате много столов.В таблице много ваз (на ней).

Дом> Комнаты> Столы> Вазы.

Я хотел бы использовать JoinQueryOver, чтобы выбрать все таблицы с вазами красного цвета - в частностиhouse.

Я думал сделать это:

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();

1 Ответ

8 голосов
/ 01 сентября 2011
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();
...