如何将场添加到另一个 table 的投影?
How to add a field to a projection from another table?
型号
我有3个模型; Catalog
、Product
和 Translation
。
Product
与 Catalog
有外向关系。
Translation
与 Product
有外向关系。
但是,Product
没有 Translations
的 Bag
。
如果我想获得翻译,我必须使用 "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)
))
型号
我有3个模型; Catalog
、Product
和 Translation
。
Product
与 Catalog
有外向关系。
Translation
与 Product
有外向关系。
但是,Product
没有 Translations
的 Bag
。
如果我想获得翻译,我必须使用 "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)
))