Как добавить поле в проекцию из другой таблицы? - PullRequest
0 голосов
/ 19 сентября 2019

моделей

У меня 3 модели;Catalog, Product и Translation.
Product имеет FK до Catalog.
Translation имеет FK до Product.

Однако Product не имеет Bag из Translations.
Если я хочу получить перевод, я должен сделать это с помощью «ручного» запроса а-ля
QueryOver<Translation>().Where(x=> x.Product = product)

ТекущийСитуация

На данный момент я работаю с запросом:

Catalog catalogAlias = null;
Product productAlias = null;

return _session
    .QueryOver(() => catalogAlias)
    .JoinAlias(() => catalogAlias.ProductList, () => productAlias)
    .Select(
        Projections.ProjectionList()
        .Add(Projections.Property(() => catalogAlias.Id))
        .Add(Projections.Property(() => productAlias.Name))
        )
    .Future<object[]>();

Что я хочу сделать

Теперь мне нужно добавить перевод к каждому возвращенному object[].Поэтому мне нужно что-то вроде этого:

Catalog catalogAlias = null;
Product productAlias = null;
Translation translationAlias = null;

return _session
    .QueryOver(() => catalogAlias)
    .JoinAlias(() => catalogAlias.ProductList, () => productAlias)
    .Select(
        Projections.ProjectionList()
        .Add(Projections.Property(() => catalogAlias.Id))
        .Add(Projections.Property(() => productAlias.Name))

        // This here vvv
        .Add(Projections.Property(()=> 
            _session.QueryOver(() => translationAlias)
                .Where(()=> translationAlias.Product == productAlias)
                .SingleOrDefault()
                .Name
        ))
        // This here ^^^

        )
    .Future<object[]>();

Конечно, если бы это сработало, я бы не стал задавать этот вопрос.Это бросает
System.ArgumentException : Unrecognised method call in expression value

Вопрос

Как я могу получить Translation,
на основе свойства Product,
, которое является частьюсписок продуктов в Catalog?

1 Ответ

0 голосов
/ 29 сентября 2019

Кажется, вы можете использовать Projections.SubQuery.Что-то вроде:

.Add(Projections.SubQuery(
            QueryOver.Of(() => translationAlias)
                .Where(() => translationAlias.Product == productAlias)
                .Take(1)
                .Select(tr => tr.Name)
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...