这是交易,我有两张桌子:
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)
提前感谢您提供任何帮助
答案 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));