1

CreateCriteriaを使用してこのクエリを実行したいのですが、次のように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>();

前もって感謝します

4

1 に答える 1

3

ドメイン モデルがないと、これを実際にテストするのは困難ですが、このようなものが必要になると思います。基本的には、ICriterion をパラメーターとして渡すことができる CreateAlias のバージョンを使用するという考え方です。

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>()
于 2012-10-27T19:32:00.757 に答える