2012-05-10 3 views
0

안녕하세요 내가 어디에 프로그래밍 방식으로 statment을 생성하는 방법이있어 다른 클래스 메서드를 누구에게 도움을 줄 수있는 세대 어디로 이동할 수 있습니까?QueryOver 어디 생성기 Nhibernate

 public static List<MME.Objects.TypedLists.InvoiceList> GetList(List<MMPFramework.SearchParameter> parameter) 
    { 
     MME.Objects.Invoice Invoice = null; 
     MME.Objects.Contractor Contractor = null; 
     MME.Objects.Contract Contract = null; 
     MME.Objects.TypedLists.InvoiceList invoiceList= null; 
     var t = MME.DAL.NhSessionHelper.GetCurrentSession().QueryOver<MME.Objects.Invoice>(() => Invoice); 

     foreach (var searchParameter in parameter) 
     { 
      if(searchParameter.Expression == "Like") 
      { 
       t.Where(Restrictions.Like(searchParameter.PropertyName, searchParameter.ObjectValueLo)); 
      } 
      else if (searchParameter.Expression == "Eq") 
      { 
       t.Where(Restrictions.Eq(searchParameter.PropertyName, searchParameter.ObjectValueLo)); 
      } 
      else if (searchParameter.Expression == "Between") 
      { 
       t.Where(Restrictions.Between(searchParameter.PropertyName, searchParameter.ObjectValueLo,searchParameter.ObjectValueHi)); 
      } 
      else if(searchParameter.Expression == "Gt") 
      { 
       t.Where(Restrictions.Gt(searchParameter.PropertyName, searchParameter.ObjectValueLo)); 
      } 
      else if (searchParameter.Expression == "Lt") 
      { 
       t.Where(Restrictions.Lt(searchParameter.PropertyName, searchParameter.ObjectValueLo)); 
      } 
      else 
      { 
       //todo more 
      } 
      //t.Where(Restrictions.Eq(searchParameter.PropertyName, searchParameter.ObjectValue)); 

     } 
     t.JoinQueryOver(() => Invoice.Contractor,() => Contractor, JoinType.LeftOuterJoin) 

      .JoinQueryOver(() => Invoice.Contract,() => Contract, JoinType.LeftOuterJoin) 
      .Select(Projections.Property(() => Invoice.Id).WithAlias(() => invoiceList.Id), 
        Projections.Property(() => Invoice.Number).WithAlias(() => invoiceList.InvoiceNumber), 
        Projections.Property(() => Contractor.Name).WithAlias(() => invoiceList.ContractorName), 
        Projections.Property(() => Contract.Number).WithAlias(() => invoiceList.ContractNumber) 
      ) 
      .TransformUsing(Transformers.AliasToBean<MME.Objects.TypedLists.InvoiceList>()); 
     return t.List<MME.Objects.TypedLists.InvoiceList>().ToList(); 

    } 

나는 이걸 시도했지만 작동하지 않는 것 같아. 누군가가 뭔가하고 있었고 그걸 처리 할 수있게되기를 바랍니다. 당신이 달성하려고하는 것을

public class BaseList 
{ 
    public object WhereGenerator(object ob) 
    { 
     QueryOver Ded = ob as QueryOver; 
     return null; 
    } 
} 
+0

? 그리고 왜 당신은 전화가 ... 목록이 없어도 목록에? – Firo

+0

llblgenpro에서 입력 한 목록 ... – Endiss

답변

1
foreach (var restriction in BaseList.Createrestrictions(parameter)) 
{ 
    t.Where(restriction); 
} 


public class BaseList 
{ 
    public IEnumerable<AbstractCriterion> Createrestrictions(List<MMPFramework.SearchParameter> parameter) 
    { 
     return parameter.Select(ToCritieria); 
    } 

    private AbstractCriterion ToCritieria(SearchParameter searchParameter) 
    { 
     if(searchParameter.Expression == "Like") 
     { 
      return Restrictions.Like(searchParameter.PropertyName, searchParameter.ObjectValueLo); 
     } 
     else ... 
    } 
} 
관련 문제