子查询 nhibernate 条件中的投影 属性

projection property in subquery nhibernate criteria

这是交易,我有 2 个表:

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

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

目的是得到一个 sql 像这样的参议员:

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

在此先感谢您的帮助

我强烈建议在您的 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));