子查询nhibernate准则中的投影属性

时间:2015-11-16 16:12:47

标签: sql nhibernate criteria projection restrictions

这是交易,我有两张桌子:

table (A) with columns ( colA_1  | colA_2 | colA_ID ) <br>
table (B) with columns ( colB )

我正在使用DetachedCriteria.For<AnyEntity>()来查询SQL。

目的是获得像这样的sq:

Select A.colA_ID from A 
where (CAST(colA_1 AS VARCHAR(10)) + CAST(colA_2 AS VARCHAR(10))) 
in (select colB from B)

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

我强烈建议您在A实体上创建一个特殊属性:

public class EntityA
{
    ...
    public virtual string ProjectedKey { get; set; } 
}

使用公式

将其映射为只读
<property name="ProjectedKey" 
          formula="(CAST(colA_1 AS VARCHAR(10)) + CAST(colA_2 AS VARCHAR(10)))" 
          insert="false" update="false" />

现在很容易使用子查询

// subquery to get colB (its id?) from table B
var detachedQuery = DetachedCriteria.For<EntityB>()    
     .SetProjection(Projections.Id()) // or property representing col B

// use subquery with property represented by formula
var rootQuery = session.CreateCriteria<EntityA>()
     .Add(Subqueries.PropertyIn("ProjectedKey", detachedQuery));