我想用CreateCriteria执行这个Query,我不知道是否可以像这样在JOIN的ON部分添加OR子句:(TZ.CodigoPuesto1_id = CP.Id或TZ.CodigoPuesto2_id = CP.Id) ,这是完整的查询:
SELECT TZ.*
FROM ConfigLinea as CL
JOIN Puesto as P ON P.ConfigLinea_id = CL.Id
join CodigoPuesto as CP ON CP.Puesto_id = P.Id
Join Trazabilidad as TZ ON
(TZ.CodigoPuesto1_id = CP.Id or TZ.CodigoPuesto2_id = CP.Id)
WHERE TZ.Codigo1 = '{0}' OR TZ.Codigo2 = '{1}' AND CL.Id = {2}
到目前为止,我试过这个,但是没有生成我需要的查询:
IList<Trazabilidad> result = session.CreateCriteria(typeof(Trazabilidad), "TZ")
.CreateAlias("CodigoPuesto1", "CP1")
.CreateAlias("CodigoPuesto2", "CP2")
.Add(Expression.Disjunction() //esto es un OR
.Add(Restrictions.Eq("TZ.Codigo1", codigo))
.Add(Restrictions.Eq("TZ.Codigo2", codigo))
)
.Add(Expression.Disjunction() //esto es un OR
.Add(Restrictions.Eq("P1.ConfigLinea", cl))
.Add(Restrictions.Eq("P2.ConfigLinea", cl))
)
.List<Trazabilidad>();
提前致谢
答案 0 :(得分:3)
如果没有你的域名模型,实际上很难对此进行测试,但我认为你会想要这样的东西。基本上,我们的想法是使用CreateAlias版本,它允许您将ICriterion作为参数传递。
IList<Trazabilidad> result = session.CreateCriteria(typeof(Trazabilidad), "TZ")
.CreateAlias("CodigoPuesto1", "CP1")
.CreateAlias("CodigoPuesto2", "CP2", JoinType.None,
Restrictions.Disjunction()
.Add(Restrictions.EqProperty("TZ.Codigo1", "CP.Id"))
.Add(Restrictions.EqProperty("TZ.Codigo2", "CP.Id"))
)
.Add(Expression.Disjunction() //esto es un OR
.Add(Restrictions.Eq("P1.ConfigLinea", cl))
.Add(Restrictions.Eq("P2.ConfigLinea", cl))
)
.List<Trazabilidad>()