2012-10-22 45 views
0

我有一个项目列表,我可以得到关于项目的所有细节。在项目类中,我有项目中的客户对象,我只是想根据客户过滤该列表。我怎样才能做到这一点 。如何使用不同的关键字来过滤对象

public ICollection<Project> GetProjectBasicDetailsByProjectTypeCustomerID(ProjectType projectType, string custName, string cordinatorName, string projectName) 
    { 
     oLog.Debug("Started"); 
     ISession session = DataAccessLayerHelper.OpenReaderSession(); 
     ITransaction transaction = null; 
     ICollection<Project> projectList = null; 
     try 
     { 
      transaction = session.BeginTransaction(); 
      ICriteria criteria = session.CreateCriteria(typeof(Project),"Project") 
       .CreateAlias("Project.customer","customer",NHibernate.SqlCommand.JoinType.InnerJoin) 
       .CreateAlias("Project.Coordinator", "Coordinator", NHibernate.SqlCommand.JoinType.InnerJoin) 
       .Add(Restrictions.Eq("Project.ProjectType", projectType)); 


      projectList = criteria.List<Project>().ToList(); 

      session.Flush(); 
      transaction.Commit(); 
     } 
     catch (Exception ex) 
     { 
      if (transaction != null && transaction.IsActive) 
       transaction.Rollback(); 
      oLog.Error(ex); 
     } 
     finally 
     { 
      if (transaction != null) 
       transaction.Dispose(); 

      if (session != null && session.IsConnected) 
       session.Close(); 
     } 
     oLog.Debug("End"); 
     return projectList; 
    } 
+1

您能否请一些代码,控制器操作,过滤逻辑等?因为根据您当前的描述很难提供帮助。 – nemesv

+0

@nemesv我已经发布了我使用的服务...在这里,我想过滤根据客户列表,而不是项目... –

+1

NHibernate参考的第15章涉及Criteria API,第15.4节特别涉及关联:http://nhforge.org/doc/nh/en/index.html#querycriteria -associat离子你试过吗?究竟是什么不起作用? –

回答

0

如果我正确地理解了您,您希望从您的项目中获得不同的客户?

在这种情况下,我认为应该这样做(这应该给你从这个标准口径项目ID - 也许有一种方法直接获得项目 - 但我现在不能测试这个:

ICriteria criteria = session.CreateCriteria(typeof(Project),"Project") 
       .SetProjection(Projections.Distinct(Projections.Property("project.Id"))) 
       .CreateAlias("Project.customer","customer",NHibernate.SqlCommand.JoinType.InnerJoin) 
       .CreateAlias("Project.Coordinator", "Coordinator", NHibernate.SqlCommand.JoinType.InnerJoin) 
       .Add(Restrictions.Eq("Project.ProjectType", projectType)); 
相关问题