如何将场添加到另一个 table 的投影?

How to add a field to a projection from another table?

型号

我有3个模型; CatalogProductTranslation
ProductCatalog 有外向关系。
TranslationProduct 有外向关系。

但是,Product 没有 TranslationsBag
如果我想获得翻译,我必须使用 "manual" 查询 la
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?

中产品列表的一部分

看来你可以使用 Projections.SubQuery。类似于:

.Add(Projections.SubQuery(
            QueryOver.Of(() => translationAlias)
                .Where(() => translationAlias.Product == productAlias)
                .Take(1)
                .Select(tr => tr.Name)
))