2012-02-29 3 views
3

수신 된 매개 변수에 따라 다양한 결과를 갖는 쿼리를 작성 중이며 상황이 충족되면이 상황에 대한 필터 및 결과 집합 금액이 작성됩니다. 필터가 준비되었지만 이러한 상황에서 금액을 설정하는 방법을 알지 못합니다. 다음은 검색어입니다.다른 수량에 대한 쿼리를 만드는 방법은 무엇입니까?

public IEnumerable<ConeSlab> ConsultarPlacasAcompanhamento(String codigoLaminador, Int16 placasAEnfornar, Boolean placasEnfornadas, Int16 placasDesenfornadas, Boolean placasRejeitadas) 
{ 
    try 
    {    
     var criteria = DetachedCriteria.For<ConeSlab>() 
      .CreateAlias("Cone", "C") 
      .CreateAlias("Slab.SlabPDO", "SP") 
      .Add(Restrictions.Eq("C.Mill", codigoLaminador)) 
      .Add(Restrictions.IsNotNull("C.IdentBeginDtm")) 
      .Add(Restrictions.IsNotNull("SP.IdentBeginDtm")); 

     var ordem = "SP.IdentBeginDtm"; 

     Junction disjunction = Restrictions.Disjunction(); 

     //Identificadas 
     if (placasAEnfornar > 0) 
     { 
      ICriterion criterion = Restrictions.Conjunction() 
       .Add(Restrictions.IsNotNull("SP.IdentEndDtm")) 
       .Add(Restrictions.IsNull("SP.ChargeDtm")) 
       .Add(Restrictions.IsNull("SP.RejectDtm")); 
      **//How to set here?** 
      disjunction.Add(criterion); 
     } 

     //Enfornadas 
     if (placasEnfornadas) 
     { 
      ICriterion criterion = Restrictions.Conjunction() 
       .Add(Restrictions.IsNotNull("SP.ChargeDtm")) 
       .Add(Restrictions.IsNull("SP.DischDtm")) 
       .Add(Restrictions.IsNull("SP.RejectDtm")); 
      disjunction.Add(criterion); 
     } 

     //Desenfornadas 
     if (placasDesenfornadas > 0) 
     { 
      ICriterion criterion = Restrictions.Conjunction() 
       .Add(Restrictions.IsNotNull("SP.DischDtm")) 
       .Add(Restrictions.IsNull("SP.MillDtm")) 
       .Add(Restrictions.IsNull("SP.RejectDtm")); 
      **//How to set here?** 
      disjunction.Add(criterion); 
     } 

     //Rejeitadas 
     if (placasRejeitadas) 
      criteria.Add(Restrictions.IsNull("SP.RejectDtm")); 

     criteria.Add(disjunction); 

     return coneSlabRepository.GetListCriteria(criteria, 300, Order.Desc(ordem)); 

    } 
    catch (Exception ex) 
    { 
     Log.Error(AppStrings.EventNatureProgramacaoSequenciamento, LibStrings.MessageExceptionQuery, ex); 
     throw new LoggedException(ex.Message); 
    } 
} 

개별 반품은 어떻게 설정합니까?

답변

3

상황에 따라 Int에서 SetMaxResult를 정의하고 가져 오기 전에 조건으로 설정하십시오.

int maxResults = 300; // Default value. 
    var criteria = DetachedCriteria.For<ConeSlab>() 
     .CreateAlias("Cone", "C") 
     .CreateAlias("Slab.SlabPDO", "SP") 
     .Add(Restrictions.Eq("C.Mill", codigoLaminador)) 
     .Add(Restrictions.IsNotNull("C.IdentBeginDtm")) 
     .Add(Restrictions.IsNotNull("SP.IdentBeginDtm")); 

    Junction disjunction = Restrictions.Disjunction(); 

    //Identificadas 
    if (placasAEnfornar > 0) 
    { 
     ICriterion criterion = Restrictions.Conjunction() 
      .Add(Restrictions.IsNotNull("SP.IdentEndDtm")) 
      .Add(Restrictions.IsNull("SP.ChargeDtm")) 
      .Add(Restrictions.IsNull("SP.RejectDtm")); 
     disjunction.Add(criterion); 
     maxResults = 10; 
    } 

    //Enfornadas 
    if (placasEnfornadas) 
    { 
     ICriterion criterion = Restrictions.Conjunction() 
      .Add(Restrictions.IsNotNull("SP.ChargeDtm")) 
      .Add(Restrictions.IsNull("SP.DischDtm")) 
      .Add(Restrictions.IsNull("SP.RejectDtm")); 
     disjunction.Add(criterion); 
     maxResults = 20; 
    } 

    //Desenfornadas 
    if (placasDesenfornadas > 0) 
    { 
     ICriterion criterion = Restrictions.Conjunction() 
      .Add(Restrictions.IsNotNull("SP.DischDtm")) 
      .Add(Restrictions.IsNull("SP.MillDtm")) 
      .Add(Restrictions.IsNull("SP.RejectDtm")); 
     disjunction.Add(criterion); 
     maxResults = 50; 
    } 

    criteria.Add(disjunction); 
    criteria.SetMaxResults(maxResults); 
+0

도움 주셔서 감사합니다. 그러나 세부 사항이 명확하지 않은 것은 수량이 자신에게 맞는 특정 상황이며 한 번에 두 가지 이상의 상황을 가질 수 있다는 것입니다. 예 : Desenfornadas로 식별 된 10 개의 레코드와 20 개의 레코드 만 표시해야합니다. 조건이 Enfornadas 인 경우 표시되는 화면은 다음과 같습니다. - Enfornadas의 조건을 만족하는 모든 레코드 - 식별 된 10 개의 레코드 - 20 레코드 Desenformadas. 따라서 금액을 끝까지 설정할 수 없습니다. 개별적으로 설정하는 방법이 있습니까? 감사합니다. –

+1

나는 그것이 할 수 있다고 믿지만, 나는 며칠 만에 대답 할 수 있었다. –

관련 문제