Как выбрать сущность на основе ее ассоциации, например, запрос WHERE IN в сыром SQL - PullRequest
2 голосов
/ 18 ноября 2011

Скажи, что у меня есть такой объект, как:

Parent

И у него есть коллекция детей:

Parent.Children

Я пытаюсь найти всех родителей, где есть дети. Идентификатор в списке.

Session.QueryOver<Parent>( () => parentAlias)
.JoinAlias( () => pareintAlias.Children, () => childrenAlias)
.WHereResitrictionOn(childrenAlias.Id).IsIn(childrenList)
.List<Parent>();

Но вышеупомянутое не работает, оно говорит, что ссылка на индекс вышла за пределы или что-то похожее.

Обновление

Мои таблицы:

Родитель -Id

Дети -parentId

У моего объекта есть коллекция HasMany, связанная с таблицей Children.

Таким образом, запрос будет выглядеть примерно так:

SELECT * 
FROM Parents p
    INNER JOIN Children c ON (c.parentID = p.id)
WHERE c.id in (SELECT id from Children WHERE id in (....) )

У меня есть список детей:

List<Children> childrenList;

1 Ответ

1 голос
/ 18 ноября 2011

Обновление: необходимо указать <Child>

, используя QueryOver

var results = Session.QueryOver<Parent>()
    .JoinQueryOver<Child>(parent => parent.Children)
        .WHereResitrictionOn(child => child.Id).IsIn(childrenList)
    .List<Parent>();

или используя LINQ

var results = (from parent in Session.Query<Parent>()
               from child in parent.Children
               where child.Id.IsIn(childrenList)
               select parent).List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...