Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何使用distinct关键字筛选对象_Asp.net Mvc 3_Nhibernate - Fatal编程技术网

Asp.net mvc 3 如何使用distinct关键字筛选对象

Asp.net mvc 3 如何使用distinct关键字筛选对象,asp.net-mvc-3,nhibernate,Asp.net Mvc 3,Nhibernate,我有一个项目列表,在那里我可以得到关于项目的所有细节。在项目类中,我在项目中有customer对象,我只想根据customer筛选该列表。我怎样才能做到这一点 public ICollection<Project> GetProjectBasicDetailsByProjectTypeCustomerID(ProjectType projectType, string custName, string cordinatorName, string projectName) {

我有一个项目列表,在那里我可以得到关于项目的所有细节。在项目类中,我在项目中有customer对象,我只想根据customer筛选该列表。我怎样才能做到这一点

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;
    }
public ICollection GetProjectBasicDetailsByProjectTypeCustomerID(项目类型ProjectType、字符串custName、字符串cordinatorName、字符串projectName)
{
调试(“启动”);
ISession session=DataAccessLayerHelper.OpenReaderSession();
ITransaction事务=null;
ICollection projectList=null;
尝试
{
事务=session.BeginTransaction();
ICriteria标准=session.CreateCriteria(项目类型),“项目”)
.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().ToList();
session.Flush();
Commit();
}
捕获(例外情况除外)
{
if(transaction!=null&&transaction.IsActive)
transaction.Rollback();
光学误差(ex);
}
最后
{
if(事务!=null)
transaction.Dispose();
if(session!=null&&session.IsConnected)
session.Close();
}
调试(“结束”);
返回项目列表;
}

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

在这种情况下,我认为类似的方法应该会起作用(这将根据此标准为您提供dictinct项目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));

您能提供一些代码、控制器操作、过滤逻辑等吗?因为根据您当前的描述很难提供帮助。@nemesv我已经发布了我使用的服务……这里我想根据客户而不是项目来过滤列表……NHibernate参考资料的第15章涉及标准API,第15.4节特别涉及as社交:你试过这个吗?到底是什么不起作用?